Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как вызвать CALLBACK функцию из DLL? / 7 сообщений из 7, страница 1 из 1
06.02.2005, 09:15
    #32902916
anterior
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать CALLBACK функцию из DLL?
Ответьте пожалуйста на такой вопрос: вот у меня есть библиотека в ней прописана 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
06.02.2005, 12:02
    #32902954
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать CALLBACK функцию из DLL?
Непонятно, почему вы эту функция назвали CALLBACK. CALLBACK-функция -- это функция, адрес которой передается некоторой другйо функции для последующего вызова в нужный момент. Ваша функция является обычной экспортируемой из DLL функцией. Ее надо объявить как extern "C" {} и желательно как __stdcall
________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
06.02.2005, 14:01
    #32902985
anterior
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать CALLBACK функцию из DLL?
>>> 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
06.02.2005, 17:15
    #32903082
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать CALLBACK функцию из DLL?
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
06.02.2005, 17:34
    #32903093
Alex_VC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать CALLBACK функцию из DLL?
А если по-шаманить вот так:
Код: plaintext
1.
2.
typedef LRESULT (CALLBACK * MyProc)(int, WPARAM, LPARAM);
MyProc pMyProc;
pMyProc =(MyProc) GetProcAddress (hLib, "MSGProc");
...
Рейтинг: 0 / 0
07.02.2005, 04:32
    #32903288
anterior
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать CALLBACK функцию из DLL?
Я все делал как вы говорите НИЧЕГО НЕ ПОЛУЧАЛОСЬ, пока я (сам незнаю как догадался), написал вот такое:

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

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


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