duguyun 2016年10月17日
VC编程,GPIB仪器控制,怎么隐式连接DLL文件啊!
想用GPIB协议控制仪器,但一直没成功,谁编写过类似的程序,能帮我分析下我错在哪不?

先谢谢大家了!

现手头有NI提供的,Ni4882.dll和Ni4882.h,以及gpib-32.dll和gpib-32.obj文件,,电脑上装了Ni的驱动程序,可以正常用GPIB协议驱动仪器,但没有def文件。

因编写的程序需要调用dll文件里的ibdev、ibwrt、ibclr等函数,根据NI的文件说明和 用Depends查看的结果,
Ni4882.dll和gpib-32.dll,也确实包含这些函数。

想隐式调用dll文件,dll相关文件放在当前程序目录下,使用两种方法:
1、在Mytest.Cpp文件中:
include "ni4882.h"

#pragma comment(lib,"ni4882.dll")
extern _declspec(dllimport) ibwrt(parm1,parm2,parm3)

2、在Project/ Setting中加入 gpib-32.obj
extern _declspec(dllimport) ibwrt(parm1,parm2,parm3)

这两种方法编译都可以顺利通过,但没法通过链接
提示错误:warning LNK4003:invalid library format;library ignored
ni4882.obj:error LNK2001:无法辨识的外部符号
或者,fatal error LNK1120:1 unresolved externals Error executing link.exe

但如果用显式调用,程序可以正常通过,不过我想用隐式的,因为后面很多Class中都要调用它的函数,很频繁

查看网站资料,没怎么看懂,附在下面:

为什么在Microsoft Visual C\C++中使用NI-488.2驱动时会产生连接错误(LNK 2019)?



主要软件:
主要软件版本: 1.0
主要软件修正版本: N/A
次要软件: N/A
硬件: GPIB

问题:
我在Microsoft Visual C\C++ 中使用了NI-488.2驱动,并且依照帮助文档中的指示包含了头文件ni4882.h,但是当我编译该文件时,却会产生连接错误LNK 2019:未定义的外部符号。我该怎么样才能编译我的工程文件呢?


解答:
除了需要包括头文件C:\Program Files\National Instruments\Shared\ExternalCompilerSupport\C\Headers\ni4882.h,还必须包括目标文件。这个目标文件就是ni4882.obj,它可以在以下路径中找到:C:\Program Files\National Instruments\Shared\ExternalCompilerSupport\C\Lib32\ni4882.obj。有三种方法可以实现包括该目标文件:

创建Measurement Studio 项目。

当创建Measurement Studio 项目时需要设置要包括的文件,这并不是一个很难的问题。
在项目中包括需要的文件。

在你的项目中添加目标文件(C:\Program Files\National Instruments\Shared\ExternalCompilerSupport\C\Lib32\ni4882.obj)
通过连接选项中添加文件。

在Visual Studio中打开项目»属性.
在树形列表中选择连接.
在命令行中输入%NIEXTCCOMPILERSUPP%\lib32\msvc\ni4882.obj
这个环境变量指向选项2中的外部编译器支持所对应的文件夹。

现在该项目就应该能够成功的编译和连接了。


...全文
272 点赞 收藏 9
写回复
9 条回复

还没有回复,快来抢沙发~

发动态
发帖子
进程/线程/DLL
创建于2007-09-28

6375

社区成员

4.9w+

社区内容

VC/MFC 进程/线程/DLL
社区公告
暂无公告