Вызов функций во внешней библиотеке C из приложения Qt (win32) - PullRequest
0 голосов
/ 30 июня 2009

Это может быть немного специфично для Qt, но здесь мы идем ...

У меня есть приложение 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, так что это не имеет смысла для меня. Я здесь довольно заблудился.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...