一文学会LabVIEW调用动态链接库DLL生成VI

前言

大家都知道,LabVIEW在做大型项目的时候,我们不可能把所有的函数全部展示在主VI中,所以肯定会使用到子VI,子VI的有两种,一种是直接使用LabVIEW中的函数生成功能的VI,还有一种方式就是调用动态链接库DLL生成相应功能的VI,今天给大家介绍一下调用动态链接库DLL生成VI。本笔记为笔者在项目中记录,为方便之后查看,同时也希望能帮助有需要的朋友。

LabVIEW版本:2018 64位

一、动态链接库的生成

动态链接库DLL的生成方式有很多种,可以使用LabVIEW生成,也可以使用其他语言生成,比如C语言,下面我们以LabVIEW生成动态链接库为例做简单介绍。

1、创建了一个包含加法(add.vi)和减法(sub.vi)程序的动态链接库项目,要通过LabVIEW项目代码创建DLL,要求从DLL调用的每个函数都包含在该LabVIEW项目独立的VI中。下图为具有独立函数的项目树示例
请添加图片描述
2、需要注意,对于每个VI,确保所有必要的输入和输出都连接到LabVIEW前面板的接线板上,以下示例函数将在DLL中生成为add(x,y)
请添加图片描述

3、在Project Explorer中,右键单击Build Specifications(程序生成规范)并选择New(新建)»Shared Library(DLL)(共享库DLL)
请添加图片描述

4、在“ **Build Properties(属性)”**对话框中,选择“ Information(信息)”选项来命名DLL,以及设置它的保存路径。
请添加图片描述
5、接下来,选择“ Source Files
(源文件)”
,选择要作为函数导出到dll的vi,这里依次选择add和sub两个vi
请添加图片描述

6、在选择时弹出的对话框里定义函数原型,点击加号依次添加x和y两个变量,并定义返回类型。
请添加图片描述

7、可以选择在Preview(预览)中预览创建的文件
请添加图片描述
8、点击Build生成dll,如下图所示,生成的dll即可被LabVIEW调用了
请添加图片描述

二、LabVIEW调用动态链接库(dll)生成VI

1、调用库函数节点生成VI

(1)当我们只有DLL,而没有.h头文件,则需要使用“ 调用库函数节点”来调用dll了。在 LabVIEW 中,可通过 “互联接口 -> 库与可执行程序 -> 调用库函数节点”来调用 DLL 中的函数。调用库函数节点常被简称为 CLN 节点,它是英文 Call Library Function Node 的缩写。调用库函数节点路径如下。
请添加图片描述

(2)使用调用库函数节点来调用 DLL 需要知道库文件包含的函数内容及参数(即头文件中应该包含的内容)。将CLN 节点拖到程序框图上,双击并配置该节点,主要配置两项,Function(函数)和Parameters(参数)

  • 在Function页指定我们需要加载的动态链接库的地址,并选择函数名,如下图所示我们调用Add函数,因为在生成的时候我们的调用规范为stdcall,所以这里也选择stdcall,Thread线程设置可以任意,如果你调用的dll是标准 C 的库函数,那一般使用 C call。

请添加图片描述

  • 在Parameters页新增并设置参数名及类型,进入该页面,会有一个默认输出参数return type,对于我们的Add函数,我们知道,一共有一个输出和两个输入,所以我们需要新增两个输入参数,并修改参数名,设置参数类型为Numeric,数据类型为8-byte Double,输入及输出参数的数据类型需要与生成dll前定义该函数的输入输出参数数据类型保持一致。

请添加图片描述

(3)设置完成后,点击OK,完成设置

请添加图片描述

(4)在程序框图面板,我们可以看到,设置之后还是会报错,是因为缺少了参数的输入。

请添加图片描述

(5)为该节点创建输入控件和输出控件。因为预计要生成vi,所以最好创建一对错误输入/输出参数,错误簇位置:前面板右键>>Array,Matrix&Cluster>>Error In,Error Out。

请添加图片描述

(6)所有必要的输入和输出都连接到LabVIEW前面板的接线板上,并修改VI图标,自此,调用DLL生成VI完成,之后想要使用该dll的Add函数,直接调用封装好的VI即可。

请添加图片描述

2、使用导入共享库工具批量生成VI

如果你既有 DLL 文件,也有头 (.h) 文件,那么可以使用共享库批量生成VI,不用再一个一个使用“调用库函数节点”来调用DLL了。具体步骤如下:

(1) 从菜单项 “Tools(工具) -> Import(导入) -> Shared Library(共享库)” 启动导入共享库工具。导入共享库工具可以方便地把 Windows、Linux、Mac OS 系统上共享库文件中的函数包装成 VI。在 Windows 操作系统上,共享库文件就是 DLL 动态链接库文件;

请添加图片描述
(2) 导入共享库工具以向导的形式,一步一步地提示用户把 DLL 函数包装成为 VI.进入之后,我们选择Creat VIs for a shared library,点击“Next”,工具可以查看到 DLL 文件提供了哪些可供用户使用的函数,然后就针对这些函数进行转换。头文件中包含了这些函数的声明。函数声明定义了一个函数包括多少个参数,以及每个参数的数据类型。该工具根据这些信息来为所生成包装的 VI 设定合适的控件。所以选择我们要使用的 DLL 文件,以及头 (.h) 文件,点击Next;

注意:没有头 (.h) 文件,没办法使用共享库工具直接生成VIs, 需要使用“ 调用库函数节点”生成VI

请添加图片描述
(3)之后,工具要求用户提供 “Include(包括路径)”,和 “Preprocessor Definitions(预处理定义)”。有时候,一个 DLL 的头文件又依赖于其它的头文件。比如,DLL 函数的头文件中可能使用了某个系统定义的数据类型,数据类型的定义在 windows.h 中。(windows.h 是 Windows SDK 中的一个文件,VC、CVI 等开发环境常常会带有 Windows SDK。)要正确地得到这个数据类型,就必须让工具找到 windows.h 这个头文件。这时,需要用户把 windows.h 文件的全路径加在 “包括路径” 里。编写 C 语言时,经常用到各种常量定义。如果 DLL 的头文件需要用到某些宏定义,就应该把它们写在 “预处理定义” 中。我们本次范例中加载的DLL头文件没有依赖其他头文件,也没有用到宏定义,所以这一项可不填写,直接点击Next;
请添加图片描述
(4)工具会列出 DLL 中的所有函数,我们可以选择其中一部分,将其包装成 VI,如图所示,可用的函数一共有两个,就是我们之前使用LabVIEW创建的,点击Next;请添加图片描述
(5)设置生成 VI 的路径和库名称,同时把下方记得勾选上,复制一份共享库到目标路径,点击Next;
请添加图片描述
(6)选择生成 VI 的错误处理机制。选择哪一种错误处理机制取决于被调用的 DLL 函数是如何设置的。如果被调用的函数本身就不产生任何错误信息,那么,它的包装 VI 也就只能采用无错误处理机制的 VI。不过最常用的机制还是 “函数返回错误代码 / 状态” 处理机制。我们这里也选择Function Returns Error Code/Status,点击Next;
请添加图片描述
(7) 来到配置 VI 和控件页面。这是比较复杂的一页,它用于配置每个 VI 和控件的属性。如自动生成的有问题,可手动修改,配置好所有VI和控件的属性之后,点击Next;
请添加图片描述
(8)进入生成界面,点解Next,即可生成VI库;请添加图片描述
9)因为我们默认生成的vi库添加到了user.lib文件夹下,所以可以在程序框图的函数选版上>>User Libraries>>test_labview>>VIs中找到我们刚刚生成的VI,在应用程序中可直接调用这些 VI。
请添加图片描述

注:导入共享库工具会尽量根据函数的声明,为它制定最适合的包装 VI,配置合理的控件。但是,有时候这个工具也无法判断准确。比如,某参数的数据类型是 int,工具就无法判断这个参数是用于传递一个整型数据还是一组整型数据;也无法判断它是用于输入还是输出。那么工具就只好采用适用性最强的默认配置方式:认为它只传递一个数据;而且既用于输入也用于输出。在 “配置 VI 及控件” 页面是可以修改这些默认设置的。令人遗憾的是,这个工具只能针对每一个 VI 去修改它的配置。如果,有一批相似的设置要修改,就比较麻烦了。比如在某个程序中,所有传递数组的参数都是以 int 形式声明的,那就不得不在这个配置页面中找到每一个这种类型的数据,把它由传递指针,改为传递数组。还有一种稍微便捷一点的修改方法:在使用这个工具前,在 DLL 头文件中,把传递数组的参数的声明都改为 int xxx[] 的形式。这样以来,工具就可以直接把这个参数识别为传递数组了。

总结

以上就是LabVIEW调用动态链接库生成VI的两种方式介绍,以上两种调用DLL生成VI的方式不局限于LabVIEW生成的DLL。

  • 7
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻喃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值