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中的外部编译器支持所对应的文件夹。

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


...全文
873 9 打赏 收藏 转发到动态 举报
写回复
用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 空格或分号间隔多项
源码链接: https://pan.quark.cn/s/0f7c75cb3aad ### MIPI Video Mode 与 Command Mode 的差异 #### 一、引言 MIPI (Mobile Industry Processor Interface) 是一种用于连接移动设备中处理器及其外围设备的标准化接口。MIPI 接口支持多种协议,其中包含 DSI (Display Serial Interface) 和 DCS (Display Control Interface) 等协议。在 MIPI 接口的应用中,主要涉及两种工作模式:Video Mode(视频模式)和 Command Mode(命令模式)。本文旨在系统性地阐述这两种模式的工作机制、特性以及实际应用环境。 #### 二、LCD RAM 概念说明 在进一步探讨 MIPI 的两种模式之前,有必要对文中提及的“LCD RAM”概念进行明确。实际上,“LCD RAM”并非一个通用术语,而是本文作者用来描述 LCD 控制器中用于存储显示数据的内存区域。LCD(Liquid Crystal Display,液晶显示屏)通常配备一个控制 IC(Integrated Circuit,集成电路),该控制 IC 可能内置 RAM 以缓存显示数据。 #### 三、MIPI Video Mode(视频模式) **定义:** - 视频模式是一种类似于传统 RGB 接口的工作模式,它要求主机持续不断地向显示器传输刷新数据。 - 在这种模式下,数据和控制信号以报文的形式通过 MIPI 总线进行传输。 - 显示器本身无需配备帧缓冲器,因为主机会周期性地刷新屏幕。 **特点:** 1. **实时性高:** 主机需要不...
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 在电磁模拟技术中,CST(Computer Simulation Technology)是一种被广泛采纳的软件工具,它主要用于电磁场、微波、天线以及射频系统的设计工作。本资料将详细分析CST软件中离散端口的具体配置方法,这些方法对于提升仿真结果的精确度和专业水准具有决定性作用。离散端口在CST软件中扮演着模拟信号输入或输出的重要角色,它们构成了仿真模型不可或缺的部分。在配置离散端口时,一个核心的原则是保证端口的方向与网格线保持一致,这是因为这样做能够有效降低计算过程中产生的误差,并确保仿真数据的有效性。如果未能遵循这一指导原则,可能会引发未知的计算问题,进而导致仿真结果失去可靠性。 在CST软件中配置离散端口,通常需要借助“Pick Points”这一功能。通过选择“Pick Edge Center”选项,端口将被设定在模型边缘的中心位置上。然而,这种做法并不总是能够确保端口与网格线保持平行。在某些特定情形下,模型的几何构造可能不允许直接选取一个与网格线平行的边作为端口的安装位置。 为了克服这一挑战,可以采用多种不同的策略。如果模型本身已经包含一条与馈电口平行的边,那么可以直接利用这条边来建立端口,此时CST软件会自动调整端口使其与网格线对齐。另一种可选的方法是,当模型不具备现成的平行边时,用户可以手动构建一个几何结构,比如一个立方体,并使其边缘与馈电口平行。通过这种方式,新建立的几何结构的边缘就可以作为端口的位置,从而确保端口与网格线的平行关系。 在实施上述操作时,必须关注端口尺寸的合理性和物理意义的一致性。端口的尺寸应当依据实际天线馈电部分的尺寸进行适当调整,过大的端口或...

15,465

社区成员

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

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