完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
摘 要:介绍了动态链接库文件的特点。以labview和Microsoft Visual C++为编程工具,详细介绍了DLL文件的创建过程。提供了开发自动测量系统时调用D LL文件编写子函数的例子,并给出了编程结果。本文提供的程序创建方法可推广应用于其他DLL文件的开发。 关键词:动态链接库; LabVIEW; 自动测量; 仪器控制 Building and Application of DLL Files in LabVIEW LI Gaosheng,ZHOU Dongming,HE Jianguo,BAI Yang (College of Electronic Science and Engineering, National Univer sity of Defense Technology, Changsha, 410073, China) Abstract:Features of Dynamic Link Library(DLL) is introduced Detailed procedure s for building DLL file is offered based on LabVIEW and Microsoft Visual C++ Example of writing a SubVI with DLL when developing automatic measuring sys tem is given, as well as its result Method offered here for programming can be extended to other development of DLL files Keywords:dynamic link library;LabVIEW;automatic measu ring;equipment controlling 在开发自动测量系统时,经常遇到计算机与仪器的通信问题,涉及仪器控制及数据处理问题,LabVIEW语言在这一领域的应用有着独到的优势。动态链接库(Dynamic Link Library,DLL)是基于Windows程序设计的一个非常重要的组成部分。LabVIEW开发中使用DLL,可以使代码更简洁,内存资源的使用更经济,而且可以便捷地利用仪器厂商或第三方提供的仪器控制子程序加速开发进程。 1动态链接库的特点 动态链接是相对于静态而言的。而静态链接是指把要调用的函数或过程链接到可执行文件中,成为该文件的一部分,即可执行文件包含了运行时所需的全部代码。当多个程序都调用相同的函数时,内存中就会存在这个函数的多个copy,造成内存资源的浪费。而动态链接调用的函数代码并没有被复制到应用程序的可执行文件中,而仅在其中加入了调用函数的描述信息。只有当应用程序被装入内存并开始运行时,才与相应的DLL建立链接关系。当执行到DLL中的函数时,根据链接产生重定位信息,Windows转去执行DLL中相应的函数代码。DLL是可共享和重载的,其代码执行速度很快。 DLL具有如下特点:DLL的编制与具体的编程语言及编译器无关,只要遵守其开发规范并安排正确的调用接口,无论使用何种语言编制的DLL都具有通用性;使用DLL不是将其库代码拷贝,而只在程序中记录函数的入口点和接口,程序执行时才将代码载入内存。多个程序使用相同的DLL时,内存中只需装载一次,可以高效经济地使用内存;DLL是基于Windows的程序模块,他不仅包含可执行代码,还可以包含数据和各种资源,扩大了库文件的使用范围;DLL中封装了一些可以被共享的资源,是W indows最重要的组成要素和Windows API函数的封装形式,Windows最基本的3大组成模块Ke rnel,GDI和User都是dll文件,他的许多新功能也是通过DLL来实现的。 LabVIEW中动态链接库的调用是通过CLF(Call Library Function) 节点实现的,如图1所示。CLF可被用来调用32位的Windows DLL,Macintosh系统的Code Fragment或Unix中的S hared Library。 2创建共享库文件 创建LabVIEW可以调用的外部代码库,需要完成下面3项任务:在LabVIEW中建立函数原型;完成c文件;在外部IDE中创建Library Project。 2.1在LabVIEW中构造DLL函数原型 首先新建一个VI并命名为“dlldemo.vi”。然后通过执行Functions→Advanced→Call Library Function在Diagram中放置CLF节点,点击右键选择“Configure”进行配置。Funct ion Name输入“avg_num”,Calling Conventions选择“C”;将Parameter项中的Return Type改为“Error”,其中Type选择为Numeric,Data Type为Signed 32b Integer。通过点击“Add Parameter after”按钮增加其他参数,各自的配置如表1所示。 经过上述设置之后,Function Prototype指示框中应出现如下信息:long avg_num(float*a, long size, float *avg); 至此,CLF节点设置完毕,返回Diagram将会发现CLF节点下面增加了4个选项,分别对应于刚才设置的4个参数。在CLF图标的右键中选择“Create. c File”,保存为“dlldemo.c”. 2.2完成.c文件 打开dlldemo.c,可见其代码如下: 这个简单的例子不需要头文件,当创建更复杂的共享库文件时,必须包含所有相关的头文件。例如,当需要使用LabVIEW管理函数时,必须包含Labview.lib,该文件位于LabVIEW安装目录下的cintools文件夹中。 2.3在外部集成开发环境(Integrated Development Environment,IDE)中完成DLL文件的创建 以Microsoft Visual C++ 6.0为例。打开“dlldemo.c”,在avg_num的声明前增加_declspec(dllexport): 点击File→New并在随后出现的对话框中选择“Win32 Dynamic Link Library”,Project Name取为“dlldemo”;点击“OK”之后,选择“An empty DLL project”。然后执行Proje cte→Add to Projecte→Files并将“dlldemo.c”程序加入。接下来设置Projecte→Setti ngs的C/C++选项,其设置如图2所示。 最后执行Builde→Build dlldemo.dll,Microsoft Visual C++将创建.dll文件并将其放入Debug文件夹中。至此,就完成了可供其他程序调用的.dll文件的创建。 3LabVIEW中DLL文件的应用举例 DLL文件在多种领域被广泛应用,自动化测量中的仪器控制就是很有潜力的市场。越来越多的仪器厂商在推出新型智能仪器的同时,会提供针对性很强的动态链接库文件,其中包含可以分别实现该仪器多种测量功能的子函数,供用户开发测量控制程序时调用,这可以大大加速用户开发基于计算机的自动测量系统的进程。 Tektronix公司提供了针对其高性能数字取样示波器TDS 8000B的tktds8k_32dll文件,通过调用该文件,可以方便地生成测量模块,进而组建更为复杂的系统。下面给出调用tktds8 k_32dll创建“设置水平轴参数”子VI的例子。其框图程序如图3所示。用到的函数是该dll文件中的tktds8k_SetHorizontalParameters,设置的参数包括status, Instrument hand le, timebase selector, horizontal position, record length等。由于DLL的代码封装,整个程序非常简洁。因为有了这个DLL文件,用户在开发时不需考虑底层问题,各参数的设置通过“Create Control”即可生成,减小了设计测量系统的工作量。在大型系统的开发过程中,根据需要创建实现某些功能的DLL文件,自己或其他开发者在今后的开发工作中都可以很方便地调用。 4结语 介绍了动态链接库文件的特点后,以LabVIEW和Microsoft Visual C++为编程工 具,详细 介绍了DLL文件的创建过程。提供了开发自动测量系统时调用DLL文件编写子函数的例子 ,并给出了编程结果。文中提供的编程方法可推广到其他动态链接库程序的编写。 通过编写和调用DLL文件,可以显著提高工作效率,在资源共享及继承性方面有着尤为突 出的优势。 参考文献 [1]杨乐平.LabVIEW高级程序设计[M].北京:清华大学出版社,2003. [2]National Instruments,LabVIEW Functions and VI Re-ference[Z]2000. [3]Tektronix,Inc.Tektronix CSA/TDS 8000B Programmer Guide[Z ]2002. |
|
相关推荐
3 个讨论
|
|
只有小组成员才能发言,加入小组>>
有没有大佬知道labview中使用Halcon拍照算子采集图像后,如何把图像传入调用的Halcon算子?
3490 浏览 0 评论
LabVIEW对51单片机电压的采集,用VISA写入函数发送字符串voltage,VISA读取函数也是字符串?
2088 浏览 1 评论
1817 浏览 0 评论
7052 浏览 1 评论
2458 浏览 0 评论
3012浏览 1评论
4261浏览 0评论
有没有大佬知道labview中使用Halcon拍照算子采集图像后,如何把图像传入调用的Halcon算子?
3492浏览 0评论
2252浏览 0评论
2204浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-13 12:18 , Processed in 0.749705 second(s), Total 49, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号