VC编程,GPIB仪器控制,怎么隐式连接DLL文件啊!

duguyun 2016-10-17 09:27:25
想用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中的外部编译器支持所对应的文件夹。

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


...全文
729 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2016-10-22
  • 打赏
  • 举报
回复
“”如何从DLL中生成LIB文件“” http://www.cnblogs.com/dongzhiquan/archive/2009/08/04/1994764.html
duguyun 2016-10-22
  • 打赏
  • 举报
回复
引用 7 楼 zgl7903 的回复:
http://search.ni.com/nisearch/app/main/p/bot/no/ap/tech/lang/en/pg/1/sn/catnav:du/q/NI4882/
大侠,你想说什么啊?我的电脑已经安装了“NI-488.2 Version 2.6”,也有基于Ni的函数调用的程序(没代码) 谢谢
duguyun 2016-10-21
  • 打赏
  • 举报
回复
引用 5 楼 zgl7903 的回复:
安装了SDK没? http://digital.ni.com/public.nsf/allkb/CC681A2DE1D34FC0862578E7004460F3
我不知道你说的SDK 具体指什么啊? 但我调试程序的电脑 是安装了 “NI-488.2 Version 2.6” 你发的连接我早已经在帖子里贴了,但这个文件我没看明白 我搜索了安装的盘,确实没有gpib-32.lib文件 谁有能运行的例子没,能给我一个不? ps:网上下载了很多gpib的代码,但没有能正常运行的 谢谢了
zgl7903 2016-10-20
  • 打赏
  • 举报
回复
duguyun 2016-10-19
  • 打赏
  • 举报
回复
引用 2 楼 chengbar 的回复:
#pragma comment(lib,"***.lib") 你需要.lib 文件
不好意思,上面我说错了,我缺少的就是lib文件,我搜遍了整个电脑都没有ni4882.lib或gpib-32.lib 基于以下两点,我认为应该有一种办法,可以不用lib文件也能调用dll文件: 1、但电脑上装有别人已经编写好的软件,可以用GPIB协议控制仪器 2、我见过用#pragma comment(lib,"***.dll") 的代码,试着抄了一遍,可以运行 所以,我现在要找出合理的方法调用dll 虽然没解决问题,但还是谢谢您
duguyun 2016-10-19
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
VC6: 工程、设置、Link、分类:Input、附加库路径:填写附加依赖库所在目录 分号间隔多项 工程、设置、Link、分类:Input、对象/库模块:填写附加依赖库的名字.lib 空格间隔多项 VS20xx: 项目、属性、链接器、常规、附加库目录:填写附加依赖库所在目录 分号间隔多项 项目、属性、链接器、输入、附加依赖项:填写附加依赖库的名字.lib 空格或分号间隔多项
我试过,这个没有用,现在我装的是VC6 VS20XX安装文件太大,因各种原因,没法弄到使用的电脑上 谢谢
sevancheng 2016-10-18
  • 打赏
  • 举报
回复
#pragma comment(lib,"***.lib") 你需要.lib 文件
赵4老师 2016-10-18
  • 打赏
  • 举报
回复
VC6: 工程、设置、Link、分类:Input、附加库路径:填写附加依赖库所在目录 分号间隔多项 工程、设置、Link、分类:Input、对象/库模块:填写附加依赖库的名字.lib 空格间隔多项 VS20xx: 项目、属性、链接器、常规、附加库目录:填写附加依赖库所在目录 分号间隔多项 项目、属性、链接器、输入、附加依赖项:填写附加依赖库的名字.lib 空格或分号间隔多项

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧