Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
n971030
 Аватар для n971030
163 / 95 / 1
Регистрация: 23.01.2010
Сообщений: 1,169
02.08.2012, 13:45     Народ подскажите, чета я забыл DLL как экспортировать #1
Вот например есть в 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");
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6893 / 5133 / 250
Регистрация: 10.12.2010
Сообщений: 22,560
Записей в блоге: 17
02.08.2012, 14:25     Народ подскажите, чета я забыл DLL как экспортировать #2
Есть такое для Builder-a, но общий принцип можно посмотреть
Dynamic-Link Library: Теория + Практика
n971030
 Аватар для n971030
163 / 95 / 1
Регистрация: 23.01.2010
Сообщений: 1,169
02.08.2012, 15:11  [ТС]     Народ подскажите, чета я забыл DLL как экспортировать #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");
Avazart
 Аватар для Avazart
6893 / 5133 / 250
Регистрация: 10.12.2010
Сообщений: 22,560
Записей в блоге: 17
02.08.2012, 15:15     Народ подскажите, чета я забыл DLL как экспортировать #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"); // обратите название на название функции (объяснение будет ниже)
в плане не понимаю (точнее есть сомнение в правильности понимания) записи
Читайте про указатели на ф-ции
-=ЮрА=-
Заблокирован
Автор FAQ
02.08.2012, 16:40     Народ подскажите, чета я забыл DLL как экспортировать #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
n971030
 Аватар для n971030
163 / 95 / 1
Регистрация: 23.01.2010
Сообщений: 1,169
02.08.2012, 16:51  [ТС]     Народ подскажите, чета я забыл DLL как экспортировать #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 (,получает адрес функции указаного по имени);
Avazart
 Аватар для Avazart
6893 / 5133 / 250
Регистрация: 10.12.2010
Сообщений: 22,560
Записей в блоге: 17
02.08.2012, 17:19     Народ подскажите, чета я забыл DLL как экспортировать #7
Что бы не путаться в скобках есть typedef
C++
1
2
3
typedef void /*__cdecl */ (*dll_func)(HINSTANCE, int, HWND);
//.... 
OpenAbout = (dll_func)GetProcAddress(hModul, "OpenAbout");
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2012, 17:33     Народ подскажите, чета я забыл DLL как экспортировать
Еще ссылки по теме:

Забыл основы. Как вывести чар? C++
C++ Подскажите как хранить перемененные в DLL
C++ Как экспортировать интерфейс из dll

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
02.08.2012, 17:33     Народ подскажите, чета я забыл DLL как экспортировать #8
Вот так будет норм
C++
1
OpenAbout = (void(__stdcall)(HINSTANCE, int, HWND)) GetProcAddress(hModul, "OpenAbout");
Yandex
Объявления
02.08.2012, 17:33     Народ подскажите, чета я забыл DLL как экспортировать
Ответ Создать тему
Опции темы

Текущее время: 01:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru