Доступ к NI-VISA из Qt C ++ 4.7 - PullRequest
       33

Доступ к NI-VISA из Qt C ++ 4.7

1 голос
/ 16 февраля 2011

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

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

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

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

collect2: ld returned 1 exit status

Следуя инструкциям в Импортируя DLL в 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 для каждого объекта в файле, а также убедился, что присутствует внешний оператор "C".

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

#include "visa.h"

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

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


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

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

, являющийся viClose вызываемого метода в NI-VISA.

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

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

Ответы [ 2 ]

0 голосов
/ 25 февраля 2013

Существует два типа библиотек 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".

По умолчанию каталог включения C:\Program Files\IVI Foundation\VISA\WinNT\include.

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

0 голосов
/ 16 февраля 2011

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

...