我正在開發一個使用Qt(4.7.0)的Windows(7)應用程序來調用DLL(NI visa32.dll)中的某些方法,以通過GPIB端口與儀器進行通信。製造商的頭文件也是可用的(visa.h)。從Qt C++ 4.7訪問NI-VISA
在項目文件中,我嘗試添加路徑和庫引用到的文件位於與原始的地方:
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中的說明,我從「visa32.dll」創建了「visa.a」,並將它們複製到子文件夾「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)"
是vi關閉NI-VISA中的一種調用方法。不過,我寧願使用Qt C++代替Visual C++。
在此先感謝。
嗨。感謝您的回答。 1.我第一次嘗試使用 INCLUDEPATH + =「C:/ Program Files/National Instruments/Shared/CVI/Include」 – Fabio 2011-02-16 23:19:11