Это может быть немного 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, так что это не имеет смысла для меня. Я здесь довольно утерян.
Вы пытались запустить его под отладчиком и посмотреть, что произойдет? При обнаружении ошибки нарушения доступа должно быть легко получить трассировку стека. И BTW, это написано как «Qt», а не «QT». –