powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как вызвать CALLBACK функцию из DLL?
7 сообщений из 7, страница 1 из 1
Как вызвать CALLBACK функцию из DLL?
    #32902916
anterior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ответьте пожалуйста на такой вопрос: вот у меня есть библиотека в ней прописана CALLBACK функция типа:
Код: plaintext
__declspec(dllexport) LRESULT CALLBACK MSGProc(int nCode, WPARAM wParam, LPARAM lParam);
Потом в клиентском приложении я делаю следующее:
Код: plaintext
1.
2.
3.
HANDLE hLib;
LRESULT (CALLBACK * MyProc)(int, WPARAM, LPARAM);
hLib = LoadLibrary ("C:\\MyDll.dll");
MyProc = GetProcAddress (hLib, "MSGProc"); // ВОЗВРАЩАЕТ NULL
Почему? и как это исправить
...
Рейтинг: 0 / 0
Как вызвать CALLBACK функцию из DLL?
    #32902954
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непонятно, почему вы эту функция назвали CALLBACK. CALLBACK-функция -- это функция, адрес которой передается некоторой другйо функции для последующего вызова в нужный момент. Ваша функция является обычной экспортируемой из DLL функцией. Ее надо объявить как extern "C" {} и желательно как __stdcall
________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
Как вызвать CALLBACK функцию из DLL?
    #32902985
anterior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>> Lelikk
В библиотеке:

Код: plaintext
1.
2.
3.
4.
extern "C" {

__declspec(dllexport) LRESULT __stdcall MSGProc(int nCode, WPARAM wParam, LPARAM lParam);

}
В приложении:
Код: plaintext
FARPROC m = GetProcAddress(hZHMSGLib, "MSGProc"); // NULL все равно!!!

Кстати говоря посмотрите определение CALLBACK:
Код: plaintext
#define CALLBACK    __stdcall // in windef.h
...
Рейтинг: 0 / 0
Как вызвать CALLBACK функцию из DLL?
    #32903082
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anterior>>> Lelikk
В библиотеке:

Код: plaintext
1.
2.
3.
4.
extern "C" {

__declspec(dllexport) LRESULT __stdcall MSGProc(int nCode, WPARAM wParam, LPARAM lParam);

}
В приложении:
Код: plaintext
FARPROC m = GetProcAddress(hZHMSGLib, "MSGProc"); // NULL все равно!!!

Кстати говоря посмотрите определение CALLBACK:
Код: plaintext
#define CALLBACK    __stdcall // in windef.h


Я знаю как определен CALLBACK, также определено еще много макросов, но их желательно употреблять по смыслу. CALLBACK в данном случае не уместен, пишите уж лучше тогда STDCALL или WINAPI или APIENTRY, imho это улучшает стиль написанного кода.

А по делу: советую проверить hZHMSGLib на равенство NULL, может у вас библиотека вовсе не грузится. Если не поможет, посмотрите такблицу экспорта библиотеки, что там написано, с помощью какого-нить инструмента вроде tdump от Borland
...
Рейтинг: 0 / 0
Как вызвать CALLBACK функцию из DLL?
    #32903093
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если по-шаманить вот так:
Код: plaintext
1.
2.
typedef LRESULT (CALLBACK * MyProc)(int, WPARAM, LPARAM);
MyProc pMyProc;
pMyProc =(MyProc) GetProcAddress (hLib, "MSGProc");
...
Рейтинг: 0 / 0
Как вызвать CALLBACK функцию из DLL?
    #32903288
anterior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я все делал как вы говорите НИЧЕГО НЕ ПОЛУЧАЛОСЬ, пока я (сам незнаю как догадался), написал вот такое:

Код: plaintext
MSGProc =(MyProc) GetProcAddress (hZHMSGLib, "_MSGProc@12");

И представляете, заработало ;)
...
Рейтинг: 0 / 0
Как вызвать CALLBACK функцию из DLL?
    #32903586
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
extern "C" писал ? Вот тебе подчеркивание.
__stdcall писал ? Вот тебе @12 (суммарный размер всех параметров в байтах ).
Чего удивляешься ?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как вызвать CALLBACK функцию из DLL?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]