Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
6 / 10 / 2
Регистрация: 29.05.2015
Сообщений: 661

Как экспортировать функцию из dll? У меня ошибка выдаётся

17.03.2017, 20:07. Показов 3141. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как экспортировать ф-ю из dll? У меня ошибка выдаётся
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.03.2017, 20:07
Ответы с готовыми решениями:

Экспортировать из dll функцию которая создает кнопку
Экспортировать из dll функцию которая создает кнопку Как должна выглядеть функция?

При печати выдается ошибка hpmsn101.dll
При печати выдается ошибка hpmsn101.dll, но печать продолжается... как избавится от нее?

Как экспортировать класс из DLL
Проблема в следующем есть класс написанный на С++, который надо поместить в DLL. Во - первых : неясно как этот класс...

25
6 / 10 / 2
Регистрация: 29.05.2015
Сообщений: 661
26.03.2017, 19:13  [ТС]
Студворк — интернет-сервис помощи студентам
А как там добавить питон,пхп,например? Можно ли вообще?

Добавлено через 26 секунд
gru74ik, в смысле?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
26.03.2017, 19:22
Цитата Сообщение от NewNoob Посмотреть сообщение
в смысле?
NewNoob, в смысле, не надо в названиях тем писать ф-я вместо функция или кол-во вместо количество и т.п.
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
26.03.2017, 19:51
NewNoob, я не эксперт в разборе ошибок продуктов Microsoft. Обычно, если не встает нормально Вижуалка, то надо либо читать километровую простынь логов, либо попросту переустановить винду. Сделать второе обычному несведующему человеку на порядок проще оказывается =)

Цитата Сообщение от NewNoob Посмотреть сообщение
А как окно тёмным сделать?
В настройках Tools/Options/General/Color theme: Dark.
0
6 / 10 / 2
Регистрация: 29.05.2015
Сообщений: 661
27.03.2017, 22:11  [ТС]
nonedark2008, с этими сапрами тоже бред полный.
0
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
28.03.2017, 10:23
NewNoob, судя из вашего кода, вы хотите использовать явное связывание dll, т.е. получить указатель на функцию, зная её сигнатуру и имя, Для этого функцию нужно экспортировать. Далее, получив функцию (в виде указателя), для её использования вам придётся включать в проект хедер вашей dll (#include "dll.h"), что наталкивает на вопрос: "А зачем неявное связывание?". Более того, интерфейсы почему-то объявлены не в хедере (хедер вообще не прикреплён к теме):
C++
1
2
3
4
5
6
7
8
9
interface IX : IUnknown
{
    virtual void _stdcall Fx() = 0;
};
 
interface IY : IUnknown
{
    virtual void _stdcall Fy() = 0;
};
Как клиентский код о них узнает? Можно вызывать методы COM объектов не имея описания типов через интерфейс IDispatch, но вы его не используете.
Для создания COM компонента нужно нечто большее чем просто реализация методов интерфейса IUnknown. Как мне кажется, вы хотите сделать dll совместимую с ANSI C, которая даст возможность работать с интерфейсами:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/* dll.h */
#include <objbase.h>
#include <iostream>
#include <unknwn.h> 
 
#ifdef _WIN32
 
#ifdef _DLL_EXPORT
#define _DLL_API __declspec(dllexport)
#else
#define _DLL_API __declspec(dllimport)
#endif  /*_WIN32*/
 
#ifndef STDCALL
#define STDCALL __stdcall
#ednif  /*STDCALL*/
 
#else
 
#define _DLL_API
#ifndef STDCALL
#define STDCALL
#endif  /*STDCALL*/
 
#enfif  /*_WIN32*/
 
interface IX : IUnknown
{
    virtual void STDMETHODCALLTYPE Fx() = 0;
};
 
interface IY : IUnknown
{
    virtual void STDMETHODCALLTYPE Fy() = 0;
};
 
#indef __cplusplus
extern "C" {
#endif
 
_DLL_API const IID IID_IX;
_DLL_API const IID IID_IY;
 
_DLL_API IUnknown* STDCALL CreateInstance();
 
#ifdef __cplusplus
}
#endif
 
 
/* dll.cpp */
 
#define _DLL_EXPORT
#include "dll.h"
 
const IID IID_IX = {0x242ead27,0xdfa9,0x412d,0xaf40,0xccfd3cbda5cd};
const IID IID_IY = {0xf4ee8427,0x53d3,0x4595,0xac0d,0x15d5856e9ba0};
 
class CA : public IX,public IY
{
private:
    long m_cRef = 0;
public:
    CA():m_cRef(0);
 
    virtual STDMETHODIMP QueryInterface(const IID &iid,void** ppv);
    virtual STDMETHODIMP_(ULONG) AddRef();
    virtual STDMETHODIMP_(ULONG) Release();
 
    virtual STDMETHODIMP_(void) Fx()
    {
        printf("Test\n");
    }
 
    virtual STDMETHODIMP_(void) Fy()
    {
        printf("DoTest\n");
    }
}
 
STDMETHODIMP CA::QueryInterface(const IID &iid, void **ppv)
{
    if(iid == IID_IUnknown)
    {
        *ppv = static_cast<IUnknown*>(this);
    }
 
    else if(iid == IID_IX)
    {
        *ppv = static_cast<IX*>(this);
    }
 
    else if(iid == IID_IY)
    {
        *ppv = static_cast<IY*>(this);
    }
 
    else
    {
        *ppv = NULL;
        return E_NOINTERFACE;
    }
 
    AddRef();
    return S_OK;
}
 
STDMETHODIMP_(ULONG) CA::AddRef()
{
    InterlockedIncrement(&m_cRef);
 
    return m_cRef;
}
 
STDMETHODIMP_(ULONG) CA::Release()
{
    if(InterlockedDecrement(&m_cRef)==0)
    {
        delete this;
    }
 
    return m_cRef;
}
 
IUnknown* STDCALL CreateInstance()
{
    IUnknown* pI = static_cast<IUnknown*>((void*)new CA());
    pI->AddRef();
    return pI;
}
 
/*  main.cpp */
 
#include "dll.h"
#include <iostream>
 
#pragma comment(lib, "dll.lib")
 
using namespace std;
 
 
 
int main (int argc, char* argv[])
{
    IUnknown* pUnk = CreateInstance();
    
    IX* pX = NULL;
    if (FAILED(pUnk->QueryInterface(IID_IX, (void**)&pX)) {
        pUnk->Release();
        cout << "Failed to query interface for IID_IX" << endl;
        return 1;
    }
    pX->Fx();
    pX->Release();
 
    IY* pY = NULL;  
    if (FAILED(pUnk->QueryInterface(IID_IY, (void**)&pY)) {
        pUnk->Release();
        cout << "Failed to query interface for IID_IY" << endl;
        return 1;
    }
    pY->Fy();
    pY->Release();
 
    pUnk->Release();
 
    return 0;
}
0
6 / 10 / 2
Регистрация: 29.05.2015
Сообщений: 661
29.03.2017, 20:29  [ТС]
Operok, я пока что довольно безграмотный,чтобы что-то хотеть,я хотел лишь,чтобы хотя бы код из книги заработал. Я знаю,что это не полная реализация com-компонента. Просто я уже на этой стадии застрял,по-моему,чуть ли не месяц назад.

Добавлено через 44 минуты
Operok, я думаю,что лучше мне пока что С++ подучить,а потом продолжить com изучать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.03.2017, 20:29

Как экспортировать интерфейс из dll
делал всё по примеру в инете, не работает код интерфейса struct I_MyInterface { virtual bool Init(int parms)=0; ...

Как экспортировать структуру из DLL?
Как експортировать структуру из DLL Добавлено через 1 час 5 минут Что же я в тупике?

Как экспортировать функции фреймфорка в DLL
Добрый день! Вот уже через неделю сдаю работу, хотелось бы чтобы клиент не &quot;таскал&quot; за собой &quot;гигантский&quot; фреймворк. ...

Как экспортировать переменную (константу) из dll
Понимаю что очень глупый вопрос, но нету времени.. Как экспортировать константу и потом ее получить, динамически подгрузив библу. ...

Как импортировать и экспортировать из dll класс?
Помогите, плз. Создал dll: //... class __declspec(dllexport) a { public : a(); }; a::a() {


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru