文档详情

LABVIEW调用动态链接库.pdf

发布:2017-04-11约字共10页下载文档
文本预览下载声明
该文档版权归上海微视泰科工作室所有,转载请注明出处! 网址: 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 类型来代 替。此
显示全部
相似文档