LABVIEW调用动态链接库.pdf
文本预览下载声明
该文档版权归上海微视泰科工作室所有,转载请注明出处!
网址:
Email: hightechyoung@
作者:HighTech Young
11
6.3. 调用动态链接库(DLL)
相对于 CIN 来讲,NI 更推荐用户使用 DLL 来共享基于文本编程语言开发的代码。除了共享或重复利用
代码,开发人员还能利用 DLL 封装软件的功能模块,以便这些模块能被不同开发工具利用。在 LabVIEW 中
使用 DLL 一般有以下几种途径:
1. 使用自己开发 DLL 中的函数。
2. 调用操作系统或硬件驱动供应商提供的 API。
对于前一种方法来说,又可以通过以下几步来实现:
a) 在 LabVIEW 中定义 DLL 原型;
b) 生成.C 或.C++文件,完成实现函数功能的代码并为函数添加 DLL 导出声明;
c) 通过外部 IDE(如 VC++)创建 DLL 项目并编译生成.dll 文件。
d) 在 LabVIEW 项目中使用 DLL 中的函数。
以下章节将通过实例对这两种情况详细进行叙述。
6.3.1. 配置 Call Library Function Node(CFN)
无论在 LabVIEW 中使用自己开发的 DLL,硬件驱动供应商或者操作系统提供的 API,都可以通过
配置 Call Library Function Node (CFN,图 6-12)来完成。
图 6-12 LabVIEW 的 Call Library Function Node
在 CFN 图标的右键菜单上选择“Configure…”打开 Call Library Function 配置对话框(图 6-13)。
通过该对话框,可以指定动态库存放路径、调用的函数名以及传递给函数的参数类型和函数返回值的类
型。在配置完后,CLF 节点会根据用户的配置自动更新其显示。
通过 Browse 按钮或者直接在“Library Name or Path”输入框中指定调用函数多在.dll 文件的路
径。
通过 Browse 按钮下的控件用户可以指定多个线程同时调用 DLL。默认情况下,LabVIEW 以“Run
该文档版权归上海微视泰科工作室所有,转载请注明出处!
网址:
Email: hightechyoung@
作者:HighTech Young
12
in UI Thread”方式调用 DLL,调用的函数将直接在用户线程中运行。另外一种方式为递归方式
“Reentrant”,在这种情况下可以允许多个线程同时调用 DLL 中的函数。但要确保正常调用,必须使
DLL 中的代码线程安全。以下是一些最基本的线程安全特性:
a. 代码不含有未受保护的全局数据(如全局变量,文件);
b. 代码不访问硬件(即不含有寄存器一级的代码);
c. 代码不调用非线程安全的函数、DLL 或者驱动;
d. 代码使用信号量或者互斥量来保护全局量;
e. 代码被一个非递归的 VI 调用时为线程安全。
图 6-13 CLF 配置对话框
在“Function Name”输入框中指定要调用函数的函数名。
通过“Call Conventions”下拉列表框指定调用 DLL 中函数的方式。可以指定调用方式为“C”(默认方
式)或 Windows 标准调用方式“stdcall”。一般来说用“C”方式调用开发人员自己写的 DLL 函数,而 “stdcall”
一般做为标准调用方式来调用 windows 的 API
通过 Parameter 域可以指定所调用函数的返回值类型。默认情况下 CFN 节点没有输入参数而且只有一
个 void 类型的返回参数。该参数由 CFN 节点第一对连接点的右端返回,代表 CFN 执行结果。如果返回参数
的类型是 void 类型,则 CFN 连接点为未启用状态(保持为灰色)。CFN 的每一对连接点代表一个输入或输
出参数,若要传递参数给 CFN 则将参数连接至相应连接点的左端,若要读取返回值,则将相应连接点的右端
连接到 Indicator。
CFN 返回参数的类型可以是 Void,Numeric 或 String。只能为返回参数指定 Void 类型,输入参数不能
指定为 Void 类型。调用的函数没有返回值时,指定 CFN 的返回参数类型为 void 类型。即使参数有确定类
型的返回值,也可以指定 CFN 的返回类型为 Void,但是此时,函数的返回值将被忽略。
有些时候,调用的函数返回值不是以上三种类型,可以使用与以上三种类中有相同大小的一个来代替。
例如如果调用的函数返回一个 Char 类型数据,则可以用一个 8-bit unsigned integer 的 Numeric 类型来代
替。此
显示全部