Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/2: Рейтинг темы: голосов - 2, средняя оценка - 4.50
n971030
155 / 102 / 4
Регистрация: 23.01.2010
Сообщений: 1,317
1

Народ подскажите, чета я забыл DLL как экспортировать

02.08.2012, 13:45. Просмотров 447. Ответов 7
Метки нет (Все метки)

Вот например есть в DLL код функции:

C++
1
2
3
4
5
6
void OpenAbout(HINSTANCE hInst, int cmdMode, HWND hWnds)
{
....
 
return;
}
а из основной программы как вызвать. dll уже готова функция экспортировал так:

C++
1
extern "C" __declspec(dllexport) void OpenAbout(HINSTANCE, int, HWND);
Добавлено через 2 минуты
я ее так вот пытался но не получилось!

C++
1
void OpenAbout(void (*) (HINSTANCE, int, HWND) ) = GetProcAddress(hModul, L"OpenAbout");
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2012, 13:45
Ответы с готовыми решениями:

Как экспортировать интерфейс из dll
делал всё по примеру в инете, не работает код интерфейса struct I_MyInterface { virtual...

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

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

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

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

7
Avazart
Эксперт С++
7919 / 5740 / 568
Регистрация: 10.12.2010
Сообщений: 26,285
Записей в блоге: 17
02.08.2012, 14:25 2
Есть такое для Builder-a, но общий принцип можно посмотреть
Dynamic-Link Library: Теория + Практика
0
n971030
155 / 102 / 4
Регистрация: 23.01.2010
Сообщений: 1,317
02.08.2012, 15:11  [ТС] 3
Цитата Сообщение от Avazart Посмотреть сообщение
Есть такое для Builder-a, но общий принцип можно посмотреть
Dynamic-Link Library: Теория + Практика
не мне не это надо - а обьяснить что означает запись

C++
1
2
3
4
5
6
7
8
9
10
11
                void(*OpenAbout)(HINSTANCE, int, HWND); //<возращаемое значение><имя функции><переменные>
 
 
                //OpenAbout = *OpenAbout;
                OpenAbout = (void(*)(HINSTANCE, int, HWND)) GetProcAddress(hModul, "OpenAbout");
                //void OpenAbout(void (*) (HINSTANCE)) = GetProcAddress(hModul, L"OpenAbout");
                OpenAbout(hInstA, cmdModeA, hwnd);
 
 
                    break;
                }
в плане не понимаю (точнее есть сомнение в правильности понимания) записи
C++
1
//void OpenAbout(void (*) (HINSTANCE)) = GetProcAddress(hModul, L"OpenAbout");
0
Avazart
Эксперт С++
7919 / 5740 / 568
Регистрация: 10.12.2010
Сообщений: 26,285
Записей в блоге: 17
02.08.2012, 15:15 4
По ссылке которая вам не надо

C++
1
2
3
4
5
6
typedef void __cdecl (*dll_func)(const int A, const int B);
 
//....
 
// пытаемся найти в таблице экспорта необходимую нам функцию
pShowSum = (dll_func)GetProcAddress(hDLL, "_ShowSum"); // обратите название на название функции (объяснение будет ниже)
в плане не понимаю (точнее есть сомнение в правильности понимания) записи
Читайте про указатели на ф-ции
0
02.08.2012, 15:15
-=ЮрА=-
Заблокирован
Автор FAQ
02.08.2012, 16:40 5
n971030, посмотри сюда GetFileType и GetCosoleCursorInfo и сюда
http://www.cyberforum.ru/visual-cpp/...ml#post1922643

DLL можно подгружать через LoadLibrary и тогда нужно инициализировать указатели на функции, а можно всё делать через lib файл. В любом случае в твоём коде не хватает этого
C++
1
2
3
4
5
6
7
#ifdef __cplusplus 
#define EXPORT extern "C" __declspec (dllexport) 
#else 
#define EXPORT __declspec (dllexport) 
#endif 
 
EXPORT void OpenAbout(HINSTANCE hInst, int cmdMode, HWND hWnds);
перед DllMain (иначе DLL слинкуется без этой функции) а также убери return; оно никчему в функции с типом void
1
n971030
155 / 102 / 4
Регистрация: 23.01.2010
Сообщений: 1,317
02.08.2012, 16:51  [ТС] 6
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
n971030, посмотри сюда GetFileType и GetCosoleCursorInfo и сюда
http://www.cyberforum.ru/visual-cpp/...ml#post1922643

DLL можно подгружать через LoadLibrary и тогда нужно инициализировать указатели на функции, а можно всё делать через lib файл. В любом случае в твоём коде не хватает этого
C++
1
2
3
4
5
6
7
#ifdef __cplusplus 
#define EXPORT extern "C" __declspec (dllexport) 
#else 
#define EXPORT __declspec (dllexport) 
#endif 
 
EXPORT void OpenAbout(HINSTANCE hInst, int cmdMode, HWND hWnds);
перед DllMain (иначе DLL слинкуется без этой функции) а также убери return; оно никчему в функции с типом void
Спасибо, я знаю что в коде нет этого, но я привел маленький пример с которым столкнулся, и сомнительно понимаю последовательность записи. Там очень много скобок, проверьте меня правильно ли понимаю запись:

C++
1
OpenAbout = (void(*)(HINSTANCE, int, HWND)) GetProcAddress(hModul, "OpenAbout");
<имя функции> = (тип возвращаемый функцией(звездочкаговорит что надо указатель вернуть) (перечисление всех типов переменных)) GetProcAddress (,получает адрес функции указаного по имени);
0
Avazart
Эксперт С++
7919 / 5740 / 568
Регистрация: 10.12.2010
Сообщений: 26,285
Записей в блоге: 17
02.08.2012, 17:19 7
Что бы не путаться в скобках есть typedef
C++
1
2
3
typedef void /*__cdecl */ (*dll_func)(HINSTANCE, int, HWND);
//.... 
OpenAbout = (dll_func)GetProcAddress(hModul, "OpenAbout");
1
-=ЮрА=-
Заблокирован
Автор FAQ
02.08.2012, 17:33 8
Вот так будет норм
C++
1
OpenAbout = (void(__stdcall)(HINSTANCE, int, HWND)) GetProcAddress(hModul, "OpenAbout");
1
02.08.2012, 17:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2012, 17:33

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

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

Народ! А кто знает где взять Help по InfoZip библиотекам UnZip32.dll & Zip32.dll?
Народ! А кто знает где взять Help по InfoZip библиотекам UnZip32.dll &amp; Zip32.dll?


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru