如何使用LabVIEW和DLL传递或接收指标
[Question]
虽然我们都知道要使用Call Library Function Node去载入DLL,但一遇到指标(Pointer)还真不知道该怎么设定?
[Answer]
指标(Pointer)是在C语言中很重要的一种资料型态,并且是被广泛的被使用,所以当要用LabVIEW去呼叫C/C++所开发的DLL时,一定会遇到指标的问题,接着我会以传递及接收指标这两个方向来说明。
一、传递指标到DLL
①传递整数(Integer)指标
如果以下是我们呼叫的函式
void ReturningValuesByReference_Integer(int x, int y, int *sum);
我们要将资料传递到*sum中,所以请在Data type栏位选择”Signed 32-bit Integer”,然后在Pass栏位选择”Pointer to Value”,如下图所示。
②传递阵列(Array)资料
我们以下列函式为例
int PassingParamters_ArrayOfIntegers (int x[], int length);
我们要将资料传递到阵列,此时也要使用指标的方式来传,请你在Type栏位选择”Array”,Data type栏位选择”Singed 32-bit Integer”,Array format栏位选择”Array Data Pointer”,如下图所示。
③传递字符串(String)指标
以下列函式为例
int PassingParamters_String (char *str);
当我们要将资料传递到*str中,请你在String format栏位选择”C String Pointer”,如下图所示。
④传递结构(Struct)资料
以下例函式为例
void ReturningValuesByReference_SimpleStruct (struct simpleStructCircle circle, struct simpleStructCircle *largerCircle);
如果是传递结构的话,只需要将原本结构中的内容依序传入即可,以本函式为例”circle”中含有三个浮点数分别是x, y, radius,所以只要依序宣告即可,但若是遇到结构指标,请你在Type栏位选择”Adapt to Type”,Data format栏位选择”Handles by Value”,如下图所示。
二、从DLL接收指标
①函式回传指标
如果函式程序码如下
int * ReturnAValue_PointerToInteger(void)
{
int *x = (int *) malloc(sizeof(int));
*x = 5;
return x;
}
所以我们可以知道函式本式回传整数指标,请你在Type栏位选择” Numeric”,在Data type栏位选择”Signed Pointer-sized Integer”,如下图所示。
②以Reference型式回传
我们以下列程序码为例
void ReturningValuesByReference_Integer (int x, int y, int *sum)
{
//sum is a pointer
*sum = x + y;
}
由程序可知,运算后的资料会放在*sum当中,所以请你在Data type栏位中选择”Pointer to Value”即可,如下图所示。
转载
在人非得以的情况下,尽量不要触碰,哈哈,太麻烦了,尤其是一个全新的DLL,连参数都搞不清楚的
有头文件的话可以试着导入共享库dll 可以自动生成 然后稍微做下修改
一般DLL都自己写,不用指针,是在避不开的话,就单独拿出来做……