2009-06-30 4 views
0

Это может быть немного Qt специфична, но здесь мы идем ...Вызов функции во внешней библиотеке C из приложения Qt (win32)

У меня есть приложение Qt, что мне нужно, чтобы взаимодействовать с парой из внешних библиотек, написанных на C. Все, кажется, работает, поскольку я могу правильно связать, но когда я пытаюсь вызвать любую функцию в одной из библиотек, я всегда получаю ошибку нарушения доступа. Для другой библиотеки я называю 10 функций в моем процессе, но 11-й дает мне то же самое. Я расскажу об особенностях первого здесь, так как я думаю, что должно быть более очевидно, что не так.

В библиотеке есть .lib, .h и устанавливается .dll на system32. Вот объявление функции из .h:

__declspec(dllimport) unsigned short InPortB(unsigned long Port); 

Библиотека поставляется с цифровой карты ввода-вывода, который вы используете эту функцию для записи данных. Порт - это адрес карты. Я знаю, что адрес 0xdeb0, и я могу проверить, что запись на этот адрес действительна, потому что код примера, который я получил с картой, делает это без ошибок. Образец кода, который я получаю, представляет собой решение C++ VS2005. Я могу построить его, и все в порядке. Когда я пытаюсь скопировать образец кода в мое приложение Qt, я получаю нарушение доступа.

Итак, я сначала подумал, что существует несоответствие с вызовами, но я не вижу, как приложение будет ссылаться, если это так.

Я просто посмотрел на exe своего приложения, и это немного странно. Похоже, что мое приложение фактически не вызывает какие-либо функции во внешней библиотеке. Кроме того, когда я просматриваю вывод отладки из сообщения об ошибке Windows, я не вижу DLL, загруженную где угодно.

Нужно ли вручную загружать dll? Мне не нужно ничего делать с dll при запуске проекта visual studio, так что это не имеет смысла для меня. Я здесь довольно утерян.

+0

Вы пытались запустить его под отладчиком и посмотреть, что произойдет? При обнаружении ошибки нарушения доступа должно быть легко получить трассировку стека. И BTW, это написано как «Qt», а не «QT». –

ответ

0

Проверьте, что другая библиотека построена в соответствии с тем же временем выполнения, что и Qt и ваше приложение (в основном, debug/release).

Смежные вопросы