2011-02-16 2 views
1

Я разрабатываю приложение Windows (7) с помощью Qt (4.7.0) для вызова некоторых методов в DLL (NI visa32.dll) для связи с инструментами через порт GPIB. Также доступен файл заголовка производителя (visa.h).Доступ к NI-VISA из Qt C++ 4.7

В файле проекта, я пытался добавить путь и ссылку на библиотеку в оригинальных местах, где файлы расположены в качестве:

INCLUDEPATH += "C:/Program Files/National Instruments/Shared/CVI/Include" 
LIBS  += "C:/Windows/System32/visa32.dll" 

, но я получаю ошибку компиляции:

collect2: ld returned 1 exit status 

Следуя инструкциям в Importing a DLL into Qt, я создал «visa.a» из «visa32.dll» и скопировал их в подпапку «visa/lib» и добавил путь к библиотеке проекта:

INCLUDEPATH += visa/include 
LIBS  += -Lvisa/lib 
LIBS  += -lvisa.a 

Я попытался также с -lvisa или -lvisa.dll, но во всех случаях я получаю также другую ошибку компиляции, говоря, что -lvisa, -lvisa.a или -lvisa.dll не найден. Я отредактировал исходный файл заголовка «visa.h» и префикс Q_DECL_IMPORT каждого объекта в файле, а также удостоверился, что присутствует extern-оператор «C».

Я включил ссылку на файл заголовка в приложении, как:

#include "visa.h" 

и обратите внимание, что компилятор не распознает ссылки объекты, принадлежащие к файлу visa.h.

Любая помощь для решения этой ошибки в сборке будет принята с благодарностью.


Я также попытался с помощью Visual C++ (2010), следуя инструкциям DLL References in Visual C++. В этом случае я не получаю никакой ошибки компиляции, но связывание ошибок. Например:

AgiE364X.obj: error LNK2019: unresolved external symbol 
"extern "C" long __stdcall viClose(unsigned long)" 

является viClose вызываемым методом в NI-VISA.

Я бы предпочел использовать Qt C++ вместо Visual C++.

Заранее спасибо.

ответ

0

Я не уверен, так как я новичок в Qt, но вот некоторые догадки: я заметил, что у вас есть пробел в строке INCLUDEPATH. Кроме того, LIBS + = -Lvisa/lib имеет capitol L (это правильно?). Я не говорю, что это ваша проблема, но, возможно, стоит попробовать. Последнее, что приходит на ум, заключается в том, что если вы используете Qt Creator, только частично введите #include «visa.h» и посмотрите, может ли автозаполнение завершить его для вас. Если это возможно, чем все остальное в порядке. Триггер автоматически заполняется с помощью Ctrl + Space. Я заметил, что когда я испортил пути автозаполнения, это хороший показатель для такого рода вещей.

+0

Hi. Спасибо за Ваш ответ. 1. В первой попытке я использую INCLUDEPATH + = "C:/Program Files/National Instruments/Shared/CVI/Include" – Fabio

+0

Привет. Спасибо за Ваш ответ. 1. В моей первой попытке я использую INCLUDEPATH + = "C:/Program Files/National Instruments/Shared/CVI/Include" , но пространство позаботится, используя кавычки. 2. Во второй попытке я использую LIBS + = -Lvisa/lib , а капитал L указывает путь к библиотеке. Напротив, нижний регистр l указывает имя библиотеки. 3. Правило включения. Когда я печатаю его, в раскрывающемся меню появляется visa.h. По-прежнему я получаю ту же ошибку компиляции: collect2: Id возвращен 1 статус выхода – Fabio

+0

Ahh. Это звучит знакомо. Я не могу вспомнить ... но я думаю, что я видел эту ошибку при попытке скомпилировать, когда предыдущий запущенный экземпляр вашего приложения (консоль командной строки) открыт. Перед попыткой компиляции убедитесь, что вы закрываете консоль. Не уверен, что вы используете встроенный консоль Qt. В этом случае может потребоваться нажать кнопку остановки (красный квадрат). В Qt Creator есть опция для установки вывода консоли на фактическую системную консоль. Это хороший вариант для выбора, поскольку все равно не все выкладывается на встроенную консоль должным образом. Если вы создаете GUI-приложение, я думаю, что оно все еще выполняется, убедитесь, что приложение закрыто. – user440297

0

Существует два типа библиотеки VISA, предоставляемых NI: один составлен borland c++, а другой составлен microsoft vc++.

Что касается Qt, вы можете использовать Qt, который должен быть скомпилирован MSVC, чтобы связать visa32.lib, который скомпилирован MSVC.И он ДОЛЖЕН связывать .lib вместо .dll, библиотека VISA MSVC по умолчанию находится в "C:\Program Files\IVI Foundation\VISA\WinNT\lib\msc".

В каталог include C:\Program Files\IVI Foundation\VISA\WinNT\include по умолчанию.

На самом деле вышеуказанная информация может быть известна из примера VISA после установки драйвера устройства.

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