尽管咱们都知道要运用 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)
{
}
所以咱们能够知道函式本式回传整数目标,请你在 Type栏位挑选” Numeric”,在Data type栏位挑选”Signed Pointer-sized Integer”
②以Reference型式回传
咱们以下列程式码为例
void ReturningValuesByReferen
{
}
以上的装备办法是直接运用调用库函数节点来实现时需求做的作业。
假如咱们选用dll调入生成VI的办法则不需求,由于labview现已给装备好了!
如下图:
这是一个经过dll主动生成的VI,里边也便是一个调用库函数节点的程序,很简单,可是参数现已给装备好了!
如下:
这两种不同的参数类型