C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
dll вызовы
Georgy
Отправлено: 21.05.2004, 14:49


Не зарегистрирован







Доброго всем времени суток. Дело вот в чём : сделал dll`ку с одной экспортируемой функцией (KeyboardProc если быть точным) с модификатором CALLBACK.
Из приложения загружаю библиотеку и нахожу эту функцию — всё нормально, и ставлю HOOK. Но это всё только в C-Builder работает.

В Visual C++ приходится экспортируемую функцию в dll объявлять с модификатором _cdecl, с CALLBACK или __stdcall не получается в том смысле, что её невозможно вызвать, а точнее после такого выражения
HOOKPROC KeyboardProc=(HOOKPROC)GetProcAddress(lib, "KeyboardProc");
переменная KeyboardProc равна NULL.
Хотя если в dll вместо CALLBACK поставить _cdecl всё работает.

Почему так происходит?
** klen
Отправлено: 22.05.2004, 10:48


Не зарегистрирован







Это обычно бывает от того что компилятор символы экспортируемые "манглит", и от модификатора в обьявлении функции это зависит. Посмотрите как на самом деле уже в слинкованом модуле dll она выгдядит(имя функции).
Georgy
Отправлено: 22.05.2004, 19:47


Не зарегистрирован







Имя экспортируемой функции без каких-либо символов типа @, ? или т.п. Т.е. KeyboardProc.
** klen
Отправлено: 23.05.2004, 00:27


Не зарегистрирован







а ты тут дллку выложи а попробую ее адрес вытащить, если получится — задача решена. а воще феномен прям, пациента надо смотреть , так ничего сказать нельзя опаределенно
Georgy
Отправлено: 23.05.2004, 14:17


Не зарегистрирован







Понятия не имею как выложить dll сюда. klen, в IRC не бываешь? Может там пообщаться?

Вернуться в Вопросы программирования в C++Builder