【LabVIEW】调用库函数传入参数、返回值数据类型配置

一、调用库函数节点


这个知识点按照这一篇教程学习比较好:
https://blog.csdn.net/where187/article/details/82388624

几个需要注意的点:

1、调用:

互连接口——库与可执行程序——调用库函数节点


2、在编写动态库函数时,要在同名头文件里函数声明处加上extern "C",如:

extern "C" _declspec(dllexport) void ArrayFloorId(double *input, int inputLength, int *output);

否则在画程序图调用库函数进行配置的时候,函数名会加载错误(出现问号、@等其他字符)。

3、先获取数组大小再进行数组初始化,否则连线错误。

4、配置

线程设置可以任意,调用规范必须设置为C。

函数各参数的数据类型一定要配置正确,否则程序会出错。

5、技巧

是在对应的参数端口那里,右键,新建常量或者输入控件,然后再在新建出来的常量或者输入控件上面修改。因为新建出来的数据类型肯定是对的。

二、传入参数、返回值数据类型配置

1、传参为指针

void test(int x, int y, int *sum); //函数接受一个指向整数的指针

2、传参为数组

int test(int x, int y, int sum[], int length); //函数接受一个整数数组

 

3、传参为char类型
int test(int x, int y, char *sum); //函数接受字符串

4、传递结构体和指向结构体的指针

void test(int x, int y, char *sum,struct simpleStructCircle *largerCircle);  //任意结构体

5、返回指针
两种方式:

(1)作为返回值

int * test(void)
{
     int *x = (int *) malloc(sizeof(int));
     *x = 5;
     return x;
}
因为LabVIEW调用库函数节点只允许返回整数、字符串和Void类型,所以必须将指针作为表示内存地址的整数接受,并手动解引用指针以获得其值。

(2)Reference 指针通过函数的形参返回
void test(int x, int y, int *sum)
{
     //sum is a pointer
     *sum = x + y;
}

同理,返回float类型数据:

void test(float& Vesionnum)
{
   Vesionnum = 1.32;
}

6、关于返回值为BOOL的情况

要知道的是,在C里面没有定义布尔是基础类型,在C++里面才有专门的布尔类型bool(字长跟BYTE相同)。
C++里面虽然有,但在实际开发中,发现大部分老的程序里在编写动态库的时候还是习惯自己定义BOOL。

#define FALSE   0
#define TRUE    1


typedef long BOOL;//或者typedef int BOOL;

返回时:
return FALSE;

在这种情况下,调用库函数节点返回类型就按照 typedef 后的类型来选择(long或int等)。

来源:https://forums.ni.com/t5/Developer-Center-Resources/Passing-and-Receiving-Pointers-with-C-C-DLLs-from-LabVIEW/ta-p/3522714?profile.language=zh-CN

其他可供参考:

https://blog.csdn.net/mysolisoft/article/details/111056587

/*******相与枕藉乎舟中,不知东方之既白*******/
原文地址:https://www.cnblogs.com/Mars-0603/p/14990391.html