71.调用动态链接库 3 - 简单数据类型参数的设置
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
调用动态链接库 3 - 简单数据类型参数的设置
复杂问题先从简单地说起,在DLL和LabVIEW之间传递参数,最常用的三种数据类型是:数值类型、字符串、数值型数组。
这几种类型的参数配置起来还是比较简单的。
1. 数值类型
LabVIEW 多种不同精度的数值类型与C语言中的数值类型的匹配是相当直观的,比如4-byte Single 对应 C 语言中的float。
LabVIEW 自带的例子“LabVIEW 8.5\examples\dll\data passing\Call Native C ode.llb”中详细的列出了简单数据类型在LabVIEW 与 C 之间的对应关系。
C 语言中经常把指针,或者数据的地址在函数间传递。
在32位操作系统中,可以使用int32数值来表示指针。
因此,当需要在LabVIEW中传递指针数据时,可以使用I32或U32数值类型来表示这个地址类型的数据。
但是,64位的程序中,数据的地址只能使用I64或U64来表示。
这样,如果一个调用了DLL函数的VI,并且函数参数中有地址型数据,使用固定数据类型的数值来表示地址,就要准备两份代码。
解决方法就是使用LabVIEW 中的新的数据类型Pointer-sized Integer。
这个数据类型的长度在不同的平台上会自动使用32位或64位长度。
如果在C语言函数参数声明中有const关键字,可以选中Constant选项。
输入/输出输入输出或兼作输入输出
float red; float* red;
C语言声
明
LabVIE
W中的配
置
LabVIE
W的使用
2. 布尔类型
布尔类型在DLL 函数和LabVIEW VI 之间传递没有专有的数据类型,是利用数值类型来传递的。
输入时先把布尔值转变为数值,在传递给DLL函数;输出时再把数值转为布尔值。
输入/输出输入输出或兼作输入输出
bool red; bool* red;
C语言声
明
LabVIE
W中的配
置
LabVIE
W的使用
3. 数值型数组
对于数组的传递,LabVIEW 只支持C 数据类型中的数值型数组。
传递数组类型需要注意的的是“Array Format”要选择“Array Data Pointer”。
这个设置中还有其他两个选项,像这种带有“Handle”的参数类型都是表示LabVIEW定义的特殊类型的。
在第三方的DLL中不会使用到。
数组参数作为输出值时,要记得为输出的数组数据开辟空间。
开辟数据空间的方法有两种:
第一种方法,创建一个长度满足要求的数组,作为初始值传递给参数,输出数的数据就会被放置在输入数组的所在的内存空间内。
第二种方法是直接在参数配置面板上进行设置。
在Minimum size 中写入一个固定的数值,LabVIEW 就会按此大小为输出的数组开辟空间。
在Minimum size 中选择函数的其它数值参数,而不是固定数值。
这样LabVIEW 会按照当时被选择的参数的值的大小来开辟空间。
输入/输出输入输出或兼作输入输出
int values[]; int values[];
C语言声
明
LabVIE
W中的配
置
LabVIE
W的使用
4. 字符串类型
字符串与使用与数组是非常类似的,实际上在C语言中字符串就是一个I8数组。
输入/输出输入输出或兼作输入输出
char* name; char* name;
C语言声
明
LabVIE
W中的配
置
LabVIE
W的使用。