1.参考示例:
LabVIEW
2.调用库函数节点
3.配置参数
1.
2.
2.1.返回参数
类型:有Void,Numeric和String三种,如下图所示。
(1)Void
Void is only available for return type and is not available for other parameters. Use Void for the return type if your function does not return any values.
Even if the function you call returns a value, you can use Void for the return type. When the function returns a value and you select Void as the return type, the value returned by the function is ignored.
(2)Numberic
以winpcap.dll为例,如下图。另外数据类型中的“指针大小整型”(pointer-sized integer),帮助文档的解释如下:
(3)String
目前还没碰到过,等遇到时再补充。
2.2.输入(出)参数
其类型共有9种,常用的有数值、数组、字符串和匹配值类型。
2.2.1.数值
需要注意的是,其传递选项有“值”和“指针”两种,分别对应值传递和指针传递。
a. 数据类型为int32
函数原型为void LVint32(int32 input, int32 *output);
本函数计算输入值的平方,然后将结果显示在“输出”中。
返回类型为void,
input类型为int32,值传递
output类型为int32,指针传递
注:如将结果返回至某个控件,该控件本身即可为返回数据提供必要的内存空间。
b. 数据类型为float64
函数原型为void LVfloat64(float64 input, float64 *output);
本函数计算输入值的平方,然后将结果显示在“输出”中。
返回类型为void,
input类型为8字节双精度,值传递
output类型为8字节双精度,指针传递
c. 数据类型为BOOL
函数原型为void WinBOOL(BOOL input, BOOL *output);
本函数将输入值反转后显示在“输出”中。
BOOL在头文件中的定义为typedef int BOOL,因此在LabVIEW中其数据类型选择int32.
d. 数据类型为BOOLEAN
函数原型为void WinBOOLEAN(BOOLEAN input, BOOLEAN *pinput, PBOOLEAN output);
本函数对值传递和指针传递的输入值执行“逻辑与”操作,并将返回结果反转后显示在“输出”中。
BOOLEAN在头文件中的定义为typedef unsigned char BOOLEAN,即无符号字符类型,占1个字节,因此在LabVIEW中其数据类型选择U8。
另外这里的形参pinput和output均使用了匹配至类型,后续再说。
LabVIEW值的数据类型 | 函数形参或返回参数的数据类型 |
I32 | BOOL、int32、INT、int、LONG、long、SSIZE_T |
U32 | DWORD、HWND、SIZE_T、UINT、ULONG、unsinged int、unsinged long、uInt32 |
I16 | SHORT、short、int16 |
U16 | USHORT、WORD、unsinged short、uInt16 |
I8 | int8 |
U8 | BOOLEAN、BYTE、uInt8 |
SGL | FLOAT、float、float32 |
DBL | double、float64 |
pointer-sized integer | 64位系统中LabVIEW的数据类型默认都是I64 |
unsinged pointer-sized integer | 64位系统中LabVIEW的数据类型默认都是U64。 |
2.2.2.数组
当类型为数组时,其字数组格式选项共有四种,分别为数组数据指针、数组句柄和数组句柄指针。
从DLL返回一个新数组时,必须在LabVIEW中为该数组分配内存。最简单的方法是:将一个已知长度的数组作为“调用库函数”节点的输入,该数组的长度不能小于DLL返回的结果数组的预期长度。
a. 数组格式为数组数据指针
函数原型为void ARRAYfloor1D(double *input, int input_length, int *output);
本函数计算输入元素(1D数组)平方值的整数部分,然后显示在“输出”中。
函数原型为void ARRAY2D(double *array, int array_length_row, int array_length_col);
本函数计算输入二维数组每个元素值的平方。从LabVIEW作为数组数据指针传入的二维数组将被DLL当作一维数组处理。指针运算可用于二维数组的访问。
注:数组大小也要传入外部代码,因为此处使用了数据指针,而不是句柄。
b. 数组格式为数组句柄
函数原型为void ARRAY1DHandle(TD1Hdl input, TD2Hdl output);
本函数计算输入元素平方值的整数部分,然后显示在“输出”中。
函数原型为void ARRAY2DHandle(TD1Hdl array);
本函数计算输入二维数组每个元素值的平方。
注:对于外部代码,数组大小不是必需的,因为此处使用了句柄,而不是数据指针。
关于句柄和指针有何异同还没搞清楚。
2.2.3.字符串
当类型为字符串时,其字符串格式选项共有四种,分别为C字符串指针、Pascal字符串指针、字符串句柄和字符串句柄指针。
a. 字符串格式为C字符串指针
函数原型为void WinCHAR(CHAR *input, PCHAR output);
本函数将输入字符串反转后显示在“输出”中。
注:数据类型PCHAR、LPCHAR、PSTR和CHAR*是等价的。LPCSTR和PCSTR是指向常量字符串的指针,且与CONST CHAR*等价。
LabVIEW值的数据类型float()函数 | 函数形参或返回参数的数据类型 |
字符串 | CHAR、UCHAR、char、unsigned char、CStr、LStrHandle |
b. 其他字符串格式
暂不清楚
2.2.4.匹配至类型
3.
4.
a. 输入输出参数为结构体,且结构体中无字符串和数组
函数原型为void CLUSTERSimple(TD1 *input, TD1 *output); 其中TD1类型struct定义为
本函数的输入簇按顺序包含一个DBL型数据、一个I32型数据和一个布尔型数据。计算DBL型数据的平方值、取I32型数据值的一半,并将布尔值取反。返回结果将显示在“输出”中。
输入参数input和输出参数output的类型均选择“匹配至类型”,数据格式选择“按值处理”。
注:①从DLL返回一个新簇时,必须在LabVIEW中为该簇分配内存。最简单的方法是:将一个已知类型的簇作为“调用库函数”节点的输入,该簇与DLL返回的结果簇的预期类型相同。如将结果返回至某个控件,则当簇中不包含数组或字符串时,该控件本身即可为返回数据提供必要的内存空间。
②当输入簇中三个元素的顺序发生变化时,函数仍可运行,但运行结果与预期结果不一致。
③此处将数据格式更改为“句柄指针”,结果一样,不知为何。
a. 输入输出参数为结构体,且结构体中包含字符串和数组
函数原型为void CLUSTERSimpleS_A(TD1 *input, TD1 *output); 其中TD1的struct定义为
本函数的输入簇包含一个DBL型数据、一个字符串和一个I32型数据。计算DBL型数据的平方值、反转字符串、将数组中的每个元素翻倍。返回结果将显示在“输出”中。
LabVIEW控件“输入”为一个簇,由DBL、字符串和1D数组组成。由于结构体TD1中的字符串长度为51,1D数组的长度为50,所以需要将簇“输入”中的字符串和1D数组也转换成同样的长度。
注:LabVIEW通常将字符串和数组作为簇中句柄传递,因此字符串必须转换为U8型数组,然后再转换为带51个U8元素的簇(50个字符+NULL);数组必须转换为带50个I32元素的簇。为了不显示额外数据,在显示数据之前去除无用数据。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论