我正在使用 Qt (4.7.0) 开发一个 Windows (7) 应用程序来调用 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
按照Importing a DLL into Qt中的说明,我从“visa32.dll”创建了一个“visa.a”,并将它们复制到子文件夹“visa/lib”,并将路径和库添加到项目文件中:
INCLUDEPATH += visa/include
LIBS += -Lvisa/lib
LIBS += -lvisa.a
我也尝试过使用-lvisa
or -lvisa.dll
,但在所有情况下,我还会收到另一个编译错误,指出-lvisa
, -lvisa.a
or-lvisa.dll
未找到。我编辑了原始头文件“visa.h”,并在文件中的每个对象前加上 Q_DECL_IMPORT,并确保存在 extern“C”语句。
我在应用程序中包含对头文件的引用:
#include "visa.h"
请注意,编译器确实可以识别属于 visa.h 文件的引用对象。
任何解决此编译错误的帮助将不胜感激。
我还按照 Visual C++ 中的DLL References的说明尝试使用 Visual C++ (2010) 。在这种情况下,我没有收到任何编译错误,而是出现链接错误。例如:
AgiE364X.obj: error LNK2019: unresolved external symbol
"extern "C" long __stdcall viClose(unsigned long)"
viClose 是 NI-VISA 中被调用的方法。
不过,我更喜欢使用 Qt C++ 而不是 Visual C++。
提前致谢。