一、dll文件的创建
dll文件的创建,我使用的是VS 2017,以此为例介绍:
1、新建一个dll项目,选择Visual c++》Windows 桌面》动态链接库(DLL)
然后会得到如下图所示的Dll.cpp文件
会得到一个空的头文件文件
其中#pragma once 代表这个头文件只被编译一次,与
1 #ifndef _DELL1_H 2 #define _DELL1_H 3 4 5 6 #endif
作用类似。
2、编写程序
在头文件写声明,值得注意的是,这里需要使用__declspec(dllexport)关键字修饰,表示这个函数是输出的函数可以在外部使用,这里的 extern “C” 表示的是用c的编译器来编译这个函数,这里的C是大写的要注意,这样编译出来的函数名就是我们希望的,否则就会产生不一样函数名。
extern "C" __declspec(dllexport) UINT8 choose(double *a, UINT8 *b);
去源文件Dll1.cpp定义函数体,别忘记在开头把Dll1.h头文件包括进来。
1 #include "stdafx.h" 2 #include "Dll1.h" 3 4 double abs(double a) 5 { 6 return a > 0 ? a : -a; 7 } 8 9 10 extern "C" __declspec(dllexport) UINT8 choose( double *a,UINT8 *b) 11 { 12 double T = *a; 13 double To = *(a + 1); 14 double Tb = *(a + 2); 15 double Tt = *(a + 2); 16 if (Tb < T | Tt < T) 17 { 18 if (abs(Tb - Tt) < 3) 19 { 20 *b = 1; 21 *(b + 1) = 1; 22 } 23 else 24 { 25 *b = 0; 26 *(b + 1) = 0; 27 28 } 29 } 30 else 31 { 32 *b = 0; 33 *(b + 1) = 0; 34 35 } 36 37 return 1; 38 }
生成dll,在“生成”》生成解决方案,如果没报错的话就能生成dll文件,实际生成的时候,如果之前这个dll文件已经zailabview使用了,那么生成的时候可能会报错(即使是复制出去的dll)关闭labview重新尝试。
之后会在羡慕文件夹的“同级目录”下的Debug文件夹出现编译好的dll文件和lib文件,不是项目文件夹下的那个。
3、在LabVIEW中使用dll
在labview中使用dll很简单只需要后面板上右键》互连接口》库与可执行…》调用函数库…
然后配置“调用库函数节点”,选择好路径和选用的函数(我这里是之前配置的,用的是Dell2.dll库)
再去参数里增加返回值和输入参数,值得注意的是,这里的数据类型必须要匹配dll库里的数据类型不然会出现各种各样的问题,另外如果传入的是一个数组的函数名(即数组首地址)那么这里需要选用的类型是数组,数组的类型按照你的要求选择但是必须和dll中的一样,数组格式为数组数据指针,这样可以通过指针输出多个返回值(但是每隔返回值数据类型不同怎么使用不清楚,之后解决了再补)
然后接好输入输出的线就可以使用了,如果你的函数或者输入输出类型有问题就会报错,检查输入输出的数据类型后再尝试,另外如果没有给数组赋初值也会出错。
这样运行就会报错
但是赋初值之后就不会报错而是正常运行