Russian Qt Forum
Ноябрь 26, 2024, 19:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: проблема при динамическом подключении dll  (Прочитано 4547 раз)
metil
Гость
« : Декабрь 29, 2009, 02:52 »

Здравствуйте!

Впервые работаю с dll и столкнулся с проблемой.
В документации к TRANS2QUIK.DLL  одна из функций описана как
long TRANS2QUIK_IS_DLL_CONNECTED (long* pnExtendedErrorCode, LPSTR lpstrErrorMessage, DWORD dwErrorMessageSize)

я объявляю 2 переменные под аргументы
Код:
private:
long ExtendedErrorCode;
char ErrorMessage [1024];

затем подключаю dll
Код:
QLibrary lib("TRANS2QUIK");
lib.load();
if (lib.isLoaded())
{
    QMessageBox::warning( 0, "Loading DLL", "DLL Loaded");

QMessageBox рапортует о том, что библиотека подключена
затем я делаю так:
Код:
    typedef long (__stdcall *T2QIDC) (long*, LPSTR, DWORD) ;
T2QIDC TRANS2QUIK_IS_DLL_CONNECTED = (T2QIDC) lib.resolve("TRANS2QUIK_IS_DLL_CONNECTED");

после чего TRANS2QUIK_IS_DLL_CONNECTED  равно NULL, а
Код:
TRANS2QUIK_IS_DLL_CONNECTED(&ExtendedErrorCode, ErrorMessage, sizeof(ErrorMessage))
выдает исключение.

Где ошибка? Подскажите, пожалуйста!
Записан
Dendy
Гость
« Ответ #1 : Декабрь 29, 2009, 03:03 »

Если вернуло NULL, то пользоваться указателем на функцию конечно же нельзя. А почему вернуло NULL? В зависимости от компилятора функция stdcall может экспортироваться с подчерком в начале и суффиксом @размер_стека_для_переменных: http://www.willus.com/mingw/yongweiwu_stdcall.html

Попробуйте: lib.resolve("_TRANS2QUIK_IS_DLL_CONNECTED"). А ещё лучше параллельно с документацией смотреть экспорты какой-нибудь смотрелкой, например вот: http://www.nirsoft.net/utils/dll_export_viewer.html
Записан
metil
Гость
« Ответ #2 : Декабрь 29, 2009, 10:30 »

Смотрелка очень помогла.
Вызвал функцию с подчерком и суффиксом и все заработало.
Большое спасибо!

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.315 секунд. Запросов: 21.