CN104536812B - 一种基于LabVIEW的动态链接库的调用方法 - Google Patents

一种基于LabVIEW的动态链接库的调用方法 Download PDF

Info

Publication number
CN104536812B
CN104536812B CN201410838583.5A CN201410838583A CN104536812B CN 104536812 B CN104536812 B CN 104536812B CN 201410838583 A CN201410838583 A CN 201410838583A CN 104536812 B CN104536812 B CN 104536812B
Authority
CN
China
Prior art keywords
function
labview
call
dynamic link
parameter
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201410838583.5A
Other languages
English (en)
Other versions
CN104536812A (zh
Inventor
杨金涛
马永光
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Institute of Radio Metrology and Measurement
Original Assignee
Beijing Institute of Radio Metrology and Measurement
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Institute of Radio Metrology and Measurement filed Critical Beijing Institute of Radio Metrology and Measurement
Priority to CN201410838583.5A priority Critical patent/CN104536812B/zh
Publication of CN104536812A publication Critical patent/CN104536812A/zh
Application granted granted Critical
Publication of CN104536812B publication Critical patent/CN104536812B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开一种基于LabVIEW的动态链接库的调用方法,包括:确定动态链接库DLL文件的位置、函数原型,以及函数的参数及类型;选取函数调用的方式;利用LabVIEW中调用库函数节点CLF提取DLL文件中的函数;基于LabVIEW的规范配置DLL文件中的函数;输入被调用的函数名,得到基于LabVIEW配置完成的函数的形参类型和返回值类型;将CLF中的节点和与其数据类型节点相对应的属性结点连接,完成利用LabVIEW的代码设计。本发明所述技术方案通过LabVIEW中使用CLF来调用其它语言产生的动态链接库函数,从而完成LabVIEW无法胜任的工作,提高了程序开发的效率。

Description

一种基于LabVIEW的动态链接库的调用方法
技术领域
本发明涉及动态链接的调用方法。更具体地,涉及一种基于图形化编程语言LabVIEW的动态链接库的调用方法。
背景技术
动态链接库是一种在运行时连接的可执行代码和数据模块,是MicrosoftWindows系统操作系统的重要组成部分,是一种特殊的且现在广为应用的函数库。动态链接库DLL虽不是exe文件,但它属于Windows可执行文件。DLL由可执行模块组成,为进程提供数据、代码和资源。与编译时使用的静态链接库不同的是,动态链接库独立于激活它们的可执行文件,调用的地址转换是在加载时解决的。与静态连接库相比,动态连接库不管被多少个程序设计,内存中都只有一个DLL的副本,因此提高了内存的使用率和程序运行速度,而且各个DLL文件可以方便的独立修改和测试,模块化更强。
动态链接库DLL是一种可执行模块,往往以单独的文件形式存在,在Windows下的后缀名一般为.dll。动态链接库有两种使用方法:一个是静态调用,另外一种是动态调用。DLL的静态调用类似于静态库的用法,程序一启动就把DLL中的代码装入内存。DLL的动态调用稍微麻烦一点,但是它更加灵活,可以更为有效地使用内存。动态链接库技术是一种在程序需要的时候才将有关代码装入内存的技术。实际当中动态链接库的可执行代码存在于.dll文件中,而.dll文件是由编译器直接生成的。一个函数被编译运行后,其可执行指令便存在于内存中了,而这段可执行指令在内存中的开始地址,是可以通过函数名得到的。因此,只要把某个函数名所指单元开始的一段内存内容写入文件,便得到了一个简单的动态链接库文件。
动态链接库代码在运行时间加载的特性很重要。一个大型程序如果不使用动态链接库,那么当这个程序的某一个功能需要升级或改进,必须写一些源代码,然后将整个程序编译,连接形成一个新的可执行文件,最终给客户重新安装使用。这个过程需要花费很长时间,哪怕只是给这个大型程序多写一行代码。可是,如果采用大量动态链接库构建整个应用程序,那么只需要改写需要升级的动态链接库的源代码,重新编译连接后,发送给客户,客户所做的仅仅是覆盖原来的动态链接库即可,不需要重新安装整个应用程序,因此使用动态链接库构建整个应用程序是模块化设计程序的一个重要特点。
从编程的角度,DLL应用程序需要知道DLL文件导出的API函数才能调用。所以DLL文件本身并不可以运行,需要应用程序调用。程序的发布上,DLL和静态lib也是有差别的。对于静态lib,程序在编译成可执行文件时会把静态链接库中的程序拷进可执行文件中,所以lib文件是不用同可执行文件一同发布的。而链接到动态库DLL中时要通过一个lib文件,lib文件保存了函数或类在DLL中的入口地址,可执行文件中相应存放的也是函数地址,所以DLL和lib要同可执行文件一起发布。实际上只要遵循约定的DLL接口规范和调用方式,用各种语言编写的DLL都可以相互调用。Windows提供的系统DLL,其中包括了Windows的API,在任何开发环境中都能被调用。
LabVIEW是美国国家仪器公司NI推出的32位的标准虚拟仪器开发平台。它是一套专门为数据采集与仪器控制、数据分析与数据表达而设计的图形化编程环境,同时是基于图形化编程语言——G-language的全新编程方法。
LabVIEW具有各种各样、功能强大的函数库,包括数据采集、GPIB、仪器控制、数据分析、信号处理、数据显示及数据存储等功能。并且提供强大的数学分析库,涵盖统计、估计、回归分析、线形代数、信号生成算法、时域和频域算法等众多科学领域。因此LabVIEW在包括航空、航天、通信、汽车和医学等众多领域得到了广泛的应用,己成为测试与测量领域的工业标准。但LabVIEW也存在不足,如不擅长于完成大量数据处理的任务;实现底层操作能力不强等。在LabVIEW开发环境中若遇到这类问题。就可通过LabVIEW的高级应用,将其不擅长或不易实现的任务通过能够或更适于完成此类任务的其它语言来实现。
因此,需要提供一种基于LabVIEW的动态链接库的调用方法。
发明内容
本发明的目的在于提供一种基于LabVIEW的动态链接库的调用方法。
为达到上述目的,本发明采用下述技术方案:
一种基于LabVIEW的动态链接库的调用方法,该方法包括如下步骤:
S1、确定动态链接库DLL文件的位置、函数原型,以及函数的参数及类型;
S2、选取函数调用的方式;
S3、利用LabVIEW中调用库函数节点CLF提取DLL文件中的函数;
S4、基于LabVIEW的规范配置DLL文件中的函数;
S5、输入被调用的函数名,得到基于LabVIEW配置完成的函数的形参类型和返回值类型;
S6、将CLF中的节点和与其数据类型节点相对应的属性结点连接,完成利用LabVIEW的代码设计。
优选地,步骤S1中函数的参数及类型包括返回的数据的类型以及形参和实参的数据类型。
优选地,步骤S2中函数调用的方式为C语言中stdcall调用方式。
优选地,步骤S3中CLF包括输入端和输出端,CLF具有函数的可扩展功能,可显示已连线的输入端和输出端的数据类型。
优选地,步骤S5中的返回值为DLL中函数的返回值。
本发明的有益效果如下:
本发明所述技术方案适用于LabVIEW中动态链接库的调用方法,应用了LabVIEW中“调用库函数节点”实现了动态链接库的调用基于LabVIEW的动态链接库的应用,一方面通过LabVIEW中使用CLF——Call Library Function函数来调用其它语言产生的动态链接库函数,从而完成LabVIEW无法胜任的工作。例如LabVIEW无法识别的采集卡的驱动。另一方面由于LabVIEW在测试与测量领域的强大功能,因此可以利用LabVIEW生成各种相关动态链接库函数,方便其它语言程序调用,从而弥补它们在测试、信号分析领域的函数和功能模块较少的不足,以及程序编制难度较大等缺点,提高了程序开发的效率,增加了应用软件的功能。
附图说明
下面结合附图对本发明的具体实施方式作进一步详细的说明。
图1示出调用库函数节点CLF具体函数示意图。
图2示出LabVIEW调用动态链接库的配置示意图。
图3示出PmacSelect函数动态链接库的配置图。
图4示出LabVIEW使用的PmacSelect子函数具体内容示意图。
图5示出OpenPmacDevice函数动态链接库的配置图。
图6示出LabVIEW使用的OpenPmacDevice子函数具体内容示意图。
图7示出PmacGetControlResponseA函数动态链接库的配置图。
图8示出LabVIEW使用的PmacGetControlResponseA子函数具体内容示意图。
图9示出基于LabVIEW的动态链接库的调用方法流程图。
具体实施方式
为了更清楚地说明本发明,下面结合优选实施例和附图对本发明做进一步的说明。附图中相似的部件以相同的附图标记进行表示。本领域技术人员应当理解,下面所具体描述的内容是说明性的而非限制性的,不应以此限制本发明的保护范围。
本实施方式提供的基于LabVIEW的动态链接库的调用方法,包括如下步骤:
S1、确定动态链接库DLL文件的位置、函数原型,以及函数的参数及类型,函数的参数及类型包括返回的数据类型及形参和实参的数据类型;对应了调用库函数节点中路径输入参数,即需要确定调用的动态链接库的路径,在实际的调用过程中需要选择所要调用的库函数在程序框图中所指定的链接路径,当链接路径选择后就会在调用库函数节点上显示该输入端的连线;
S2、选取函数调用的方式,调用函数的方式是采用C语言中stdcall调用方式,其中LabVIEW和32位系统C语言Win32数据类型对照表如表1所示;
表1
LabVIEW Win32
Int8 signed Char
Int16 Short
Int32 Int long
unsigned Int8 Char
unsigned Int16 unsigned Char
unsigned Int32 unsigned Int、unsigned long
S3、利用LabVIEW中调用库函数节点CLF提取DLL文件中的函数,确定DLL中输入函数对应LabVIEW中CLF中的输入参数1...n的数据类型及参数数目;
S4、基于LabVIEW的规范配置DLL文件中的函数,依据表1中的对应关系,确定数据类型,完成动态链接库的模块与LabVIEW中数据的相互交换;
S5、输入被调用的函数名,得到基于LabVIEW配置完成的函数的形参和返回值类型,其中返回值是动态链接库DLL中函数的返回值,参数1..n输出的是动态链接库函数所对应的LabVIEW数据类型的输出参数;
S6、等全部的数据类型配置完后,将CLF中的节点和与其数据类型节点相对应的属性结点通过数据连线进行相连,完成利用LabVIEW中调用window系统所产生的动态链接库函数的代码设计。
在LabVIEW中利用调用库函数节点CLF实现对动态链接库DLL的访问,从而实现对动态链接库的调用,调用的关键在于确定被调用函数的名称、功能及其输入输出参数。调用库函数节点CLF支持众多数据类型和调用规范。可用于调用大多数标准动态链接库或自定义动态链接库。调用库函数节点CLF具有函数的可扩展功能,可显示已连线的输入端和输出端的数据类型,与捆绑函数相似,其调用库函数节点CLF的具体函数如图1所示。
其中调用库函数节点CLF的具体函数的各参数定义和说明如下:
路径输入,确定要调用的DLL或共享库的路径。必须勾选调用库函数对话框的在程序框图中指定路径,才能在连线上显示该输入端。
错误输入,表明LabVIEW的程序模块VI或函数运行前发生的错误。默认值为无错误。如错误发生在VI或函数运行之前,VI或函数将把错误输入值传递至错误输出。如在VI或函数运行前没有发生错误,VI或函数将正常运行。如在VI或函数运行时发生错误,VI或函数将正常运行并在错误输出中设置自身的错误状态。简易错误处理器或通用错误处理器VI可用于显示错误代码的说明信息。错误输入和错误输出用于检查错误并通过将一个节点的错误输出与另一个节点的错误输入连线指定执行顺序。状态的值为TRUE(叉)时表示在VI或函数运行前已发生错误,值为FALSE(勾)时表示警告或无错误。默认值为FALSE。代码是错误或警告代码。默认值为0。如状态的值为TRUE,代码将为非零错误代码。如状态的值为FALSE,代码将为0或警告代码。源表示错误或警告的源,大多数情况下表示出现错误或警告的VI或函数名。默认值为空字符串。
参数1..n,是库函数的范例输入参数。
路径输出,返回调用DLL或共享库的路径。必须勾选调用库函数对话框的在程序框图中指定路径,才能在连线上显示该输出端。
错误输出,包含错误信息。如错误输入表明在VI或函数运行前已发生错误,错误输出将包含相同的错误信息。否则,表明VI或函数中出现的错误状态。右键单击错误输出的前面板显示控件,从快捷菜单中选择解释错误可获取更多关于该错误的信息。状态的值为TRUE(叉)时表示错误,的值为FALSE(勾)时表示警告或无错误。代码是错误或警告代码。如状态的值为TRUE,代码将为非零错误代码。如状态的值为FALSE,代码将为0或警告代码。源表示错误或警告的源,大多数情况下表示出现错误或警告的VI或函数名。
返回值,是库函数的范例返回值。
参数1…n输出,是库函数的范例输出参数。
调用库函数节点CLF由输入端和输出端组成,大多数情况下输入端和输出端都是成对的出现,其中接线端(输入端或输出端)可单个使用,也可成对使用,如几点未返回值,则最顶部的一对接线端未使用。除最顶部的一对接线端外,其它每对接线端从上至下依次对应于被调用函数的参数列表中某个参数。连接左侧的接线端便为函数传递一个值。从右侧的接线端开始连线则读取了函数调用后某个参数的值。右键单击节点并从快捷菜单中选择配置,显示调用库函数对话框,在该对话框中为节点指定库名称或路径、函数名、调用规范、参数和返回值,当设置完成后,节点将自动调整大小以包括数量正确的接线端,并将接线端依据动态链接库设定的数据类型设置为LabVIEW相应的数据类型。
下面通过三组实施例对本发明作进一步说明:
实施例1:可编程多轴控制器卡选择设备动态链接库调用实例
可编程多轴控制器卡选择设备的函数为PmacSelect(),其原型函数为longPmacSelect(HWND hwnd);其通过LabVIEW调用Pcomm32.dll的动态链接库的配置方式如图3所示。完成LabVIEW的G语言代码设计后,即生成可供LabVIEW使用的PmacSelect函数,其子函数为PS,具体函数内容如图4所示。
实施例2:可编程多轴控制器卡打开设备动态链接库调用实例
可编程多轴控制器卡打开设备的函数为OpenPmacDevice(),其原型函数为BOOLOpenPmacDevice(DWORD dwDevice);其通过LabVIEW调用Pcomm32.dll的动态链接库的配置方式如图5所示。完成LabVIEW的G语言代码设计后,即生成可供LabVIEW使用的OpenPmacDevice函数,其子函数为OPD,具体函数内容如图6所示。
实施例3:可编程多轴控制器卡控制设备动态链接库调用实例
可编程多轴控制器卡控制设备的函数为PmacGetControlResponseA(),其原型函数为long PmacGetControlResponA(DWORD dwDevice,PCHAR response,UINT maxchar,CHAR ctl_char);其通过LabVIEW调用Pcomm32.dll的动态链接库的配置方式如图7所示。完成LabVIEW的G语言代码设计后,即生成可供LabVIEW使用的PmacGetControlResponseA函数,其子函数为OPD,具体函数内容如图8所示。
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定,对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动,这里无法对所有的实施方式予以穷举,凡是属于本发明的技术方案所引伸出的显而易见的变化或变动仍处于本发明的保护范围之列。

Claims (6)

1.一种基于LabVIEW的动态链接库的调用方法,其特征在于,该方法包括如下步骤:
S1、确定动态链接库DLL文件的位置、函数原型,以及函数的参数及类型;
S2、选取函数调用的方式;
S3、利用LabVIEW中调用库函数节点提取DLL文件中的函数;
S4、基于LabVIEW的规范配置DLL文件中的函数;
S5、输入被调用的函数名,得到基于LabVIEW配置完成的函数的形参类型和返回值类型;
S6、将调用库函数节点中的节点和与其数据类型节点相对应的属性结点连接,完成利用LabVIEW的代码设计。
2.根据权利要求1所述的基于LabVIEW的动态链接库的调用方法,其特征在于,所述步骤S1中函数的参数及类型包括返回的数据的类型以及形参和实参的数据类型。
3.根据权利要求1所述的基于LabVIEW的动态链接库的调用方法,其特征在于,所述步骤S2中函数调用的方式为C语言中stdcall调用方式。
4.根据权利要求1所述的基于LabVIEW的动态链接库的调用方法,其特征在于,所述步骤S3中调用库函数节点的具体函数的参数包括:路径输入参数、错误输入参数、库函数的范例输入参数、路径输出参数、错误输出参数、返回值和库函数的范例输出参数。
5.根据权利要求1所述的基于LabVIEW的动态链接库的调用方法,其特征在于,所述步骤S3中调用库函数节点包括输入端和输出端,调用库函数节点具有函数的可扩展功能,可显示已连线的输入端和输出端的数据类型。
6.根据权利要求1所述的基于LabVIEW的动态链接库的调用方法,其特征在于,所述步骤S5中的返回值为DLL中函数的返回值。
CN201410838583.5A 2014-12-30 2014-12-30 一种基于LabVIEW的动态链接库的调用方法 Active CN104536812B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410838583.5A CN104536812B (zh) 2014-12-30 2014-12-30 一种基于LabVIEW的动态链接库的调用方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410838583.5A CN104536812B (zh) 2014-12-30 2014-12-30 一种基于LabVIEW的动态链接库的调用方法

Publications (2)

Publication Number Publication Date
CN104536812A CN104536812A (zh) 2015-04-22
CN104536812B true CN104536812B (zh) 2018-04-03

Family

ID=52852344

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410838583.5A Active CN104536812B (zh) 2014-12-30 2014-12-30 一种基于LabVIEW的动态链接库的调用方法

Country Status (1)

Country Link
CN (1) CN104536812B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105278348A (zh) * 2015-11-23 2016-01-27 中国科学院光电研究院 一种模块化的航天器轨道姿态半物理仿真系统
CN106843995B (zh) * 2017-01-25 2019-09-06 杭州迪普科技股份有限公司 一种文件编译方法及装置
CN109271207A (zh) * 2018-09-21 2019-01-25 武汉烽理光电技术有限公司 基于matlab调用usb3.0的高速采集卡驱动的方法
CN111610966A (zh) * 2019-02-22 2020-09-01 龙芯中科技术有限公司 程序的运行方法、装置和计算设备
CN110471837A (zh) * 2019-07-05 2019-11-19 平安证券股份有限公司 程序检测方法、装置及计算机可读存储介质
CN111078420B (zh) * 2019-10-14 2023-06-27 惠州市德赛西威汽车电子股份有限公司 一种基于LabVIEW调用动态链接库中结构体函数的方法
CN112685031A (zh) * 2020-12-31 2021-04-20 江苏兴邦能源科技有限公司 燃料电池测试系统dbc文件的解析方法及系统
CN113656126B (zh) * 2021-07-30 2023-10-27 北京数码大方科技股份有限公司 信息系统的菜单显示方法及菜单显示装置、电子设备
KR20240015594A (ko) 2022-07-27 2024-02-05 주식회사 큐심플러스 양자정보기술 시스템 설계/검증 및 사용자 이용 편의성향상 처리 장치 및 방법

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103440162A (zh) * 2013-09-10 2013-12-11 天津点点科技发展有限公司 基于labview的多功能传感器实验系统的设计
CN103611836A (zh) * 2013-11-27 2014-03-05 张家港市张运机械制造有限公司 电梯导轨自动挡放料装置
CN103942092A (zh) * 2014-04-25 2014-07-23 中国人民解放军装备学院 一种支持LabView图形化编程的HLA协同仿真方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103440162A (zh) * 2013-09-10 2013-12-11 天津点点科技发展有限公司 基于labview的多功能传感器实验系统的设计
CN103611836A (zh) * 2013-11-27 2014-03-05 张家港市张运机械制造有限公司 电梯导轨自动挡放料装置
CN103942092A (zh) * 2014-04-25 2014-07-23 中国人民解放军装备学院 一种支持LabView图形化编程的HLA协同仿真方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
《LanVIEW中调用动态链接库实现短信息传送》;曾敏辉、危韧勇;《测控技术》;20041230;第23卷(第12期);第52-54页 *
《动态链接库在LabVIEW中的高级应用》;谢其德、张云云;《维计算机信息》;20041231;第20卷(第10期);第45-46页 *
《基于动态链接库的LabVIEW高级应用》;叶子郁、朱目成;《仪器仪表用户》;20051231;第12卷(第2期);第106-107页 *

Also Published As

Publication number Publication date
CN104536812A (zh) 2015-04-22

Similar Documents

Publication Publication Date Title
CN104536812B (zh) 一种基于LabVIEW的动态链接库的调用方法
US9513880B2 (en) Graphical function specialization
US6282699B1 (en) Code node for a graphical programming system which invokes execution of textual code
JP4950454B2 (ja) テスト自動化のスタック階層化
US7941299B1 (en) Verification and validation system for a graphical model
CN112270149B (zh) 验证平台自动化集成方法、系统及电子设备和存储介质
US20030200533A1 (en) Method and apparatus for creating software objects
US9489283B1 (en) Unified hardware and software debugging
US9727446B2 (en) Modifiers that customize presentation of tested values to constraints
CN102246471A (zh) 测试装置及测试方法
US8127275B1 (en) System and method for recording the state of variables and objects when running unit tests
US9645915B2 (en) Continuous evaluation of program code and saving state information associated with program code
US20160034617A1 (en) Prototyping an Image Processing Algorithm and Emulating or Simulating Execution on a Hardware Accelerator to Estimate Resource Usage or Performance
CN111985055B (zh) 一种模型封装方法、装置及电子设备
CN111176984A (zh) 一种面向信号的自动测试实现方法
US20160092175A1 (en) Remote Interface to Logical Instruments
US9117029B2 (en) Deferred evaluation and presentation of a custom diagnostic analysis
US8234647B1 (en) Checking for mutual exclusiveness of a shared resource
US7428737B1 (en) Method for using header files to call a shared library from a dynamic environment
US9442826B2 (en) Kernel functionality checker
US20130111431A1 (en) Validation of a system model including an activity diagram
US9223595B2 (en) Mechanism for comparison of disparate data in data structures
CN108885574B (zh) 用于监视和报告设计、编译和运行时的性能和正确性问题的系统
US9612940B1 (en) Combination and reuse of parameters in an automated test environment
US9442701B1 (en) Verifying models for exceptional behavior

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant