在LABVIEW 中调用DLL时,把编写好的DLL放在当前目录或特定目录下,然后根据应用程序的需要,确定参数个数和参数类型及调用规则,在LABVIEW中正确地配置DLL 。首先从函数模板Function 中调用CLF 节点,双击弹出设置对话框,如图2所示。对话框中,第一个参数Library Name Path 填入需要调用的动态链接库文件的名字和路径。第二个参数Function Name 是链接库中要调用的函数名称。第三个参数为线程调用方式,在DLL只被一个线程调用的情况下,两种调用方式都可选择,但在多线程调用情况下,需注意选择。Run in UI Thread 表示在用户接口线路中调用,DLL 的执行期将等到用户接口线程(即LABVIEW环境下的VI 应用程序) 执行DLL 的导出函数调用时才开始;Run in any Thread 表示允许多个线程同时调用这个DLL。在编制DLL 过程中,充分考虑了线程保护的同步机制,如使用临界区、互斥、信号量等,线程安全较为确定,那么可以选用Run in any Thread方式,这将有助于提高DLL调用的性能;反之,可选Run in UI Thread。第四个参数是对DLL的调用规则,可选择C或stdcall,在此选择stdcall。LABVIEW调用库函数设置界面如图3所示,其中Parameters项是对参数选项的设置,根据调用的函数,添加和设置相应的参数,参数名称、类型和数据类型,且要与被调用函数中的参数名相同。需要注意的是,当调用多个函数时要分别填写参数的个数和对应的类型,而且在调用过程中应保持数据位的一致。由于LABVIEW中的数据类型和不同编程语言对应的数据类型在形式上有些不一致,因此需要知道它们是如何对应的。如:LABVIEW中I16表示有符号16位整型,对应C语言中的short型。
在LABVIEW中调用动态链接库,难点在于参数类型匹配。最常用的三种数据类型是:数值类型、字符串、数值型数组。设计中,将采集数据传送到内存块过程涉及到带数组参数的函数调用,值得注意的是,LABVIEW 只支持 C 数据类型中的数值型数组,调用含有数组参数函数时,传递数组类型“Array Format”要选择“Array Data Pointer”。这个设置中还有其他两个选项(Array Handle,Array Handle Pointer),这种带有“Handle”的参数类型都是表示LABVIEW定义的特殊类型的,在第三方的DLL中不会使用到。按前述步骤设置好CLF节点,连接外部输入(采集数量size)和输出(存放采集数据的数组)后,输出没有反应,检查分析得知,数组参数作为输出值时,要为输出的数组数据开辟空间,将输入数据的指针复制给输出数组数据指针并传给驱动函数。在LABVIEW中开辟数据空间的方法有两种: