从Qt C ++ 4.7访问​​NI-VISA

时间:2011-02-16 19:39:21

标签: qt visual-c++ visa

我开发使用Qt(4.7.0)来调用在DLL(NI visa32.dll)一些方法中在Windows(7)应用与通过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-lvisa.dll,但在所有的情况下,我得到的也是另一个编译错误,说,-lvisa-lvisa.a-lvisa.dll找不到。我编辑了原始头文件“visa.h”,并在文件中的每个对象都加上了Q_DECL_IMPORT前缀,并确保存在extern“C”语句。

我在应用程序中包含对头文件的引用:

#include "visa.h"

并注意编译器确实识别属于visa.h文件的引用对象。

非常感谢任何帮助解决此编译错误。


我也按照DLL References in Visual C++的说明尝试使用Visual C ++(2010)。在这种情况下,我没有得到任何编译错误,但链接错误。例如:

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

在NI-VISA中使用viClose调用方法。

我宁愿使用Qt C ++而不是Visual C ++。

提前致谢。

2 个答案:

答案 0 :(得分:0)

我不确定,因为我自己是Qt的新手,但这里有一些猜测:我注意到你在INCLUDEPATH字符串中有一个空格。另外,LIBS + = -Lvisa / lib有一个国会大厦L(这是正确的吗?)。我不是说这是你的问题,但也许值得一试。想到的最后一件事是,如果你使用Qt Creator只是部分键入#include“visa.h”,看看自动完成是否可以为你完成。如果可以,那么其余的就可以了。使用Ctrl + Space触发自动完成。我注意到,当我弄乱路径时,自动完成是一个很好的衡量这种事情的方法。

答案 1 :(得分:0)

NI提供两种类型的VISA库:一个是borland c++编译的,另一个是microsoft vc++编译的。

至于Qt,您可以使用MSVC编译的Qt来链接由visa32.lib编译的MSVC。它必须链接.lib而不是.dll,默认情况下,MSVC VISA库位于"C:\Program Files\IVI Foundation\VISA\WinNT\lib\msc"

默认情况下,include目录为C:\Program Files\IVI Foundation\VISA\WinNT\include

实际上,在安装设备驱动程序后,可以从VISA示例中了解上述信息。