LabVIEW调用DLL动态链接库
有些数据运算比如多个数组之间的处理、雨流计数法、卡尔曼滤波使用labview这样的图形编程语言实在过于麻烦,实现不难但有一定的逻辑复杂度,倒不如用C++或者matlab来实现,之后生成DLL供LabVIEW调用。
示例一
通过调用DLL实现数组求和。输入一个10个元素的数组,返回全部元素之和。
1.生成DLL
VS中选择创建动态链接库项目
在头文件和源文件文件夹分别创建相应的.h .cpp文件
在test.h中添加函数声明
extern "C" __declspec(dllexport) int qiuhe(int raw[10]);
在test.cpp中写函数体,注意要包含这两个头文件
#include "pch.h"//---
#include "test.h"//---
extern "C" __declspec(dllexport) int qiuhe(int raw[10])
{
int add = 0;
for (int i = 0; i < 10; i++)
add += raw[i];
return add;
}
点击生成解决方案就得到DLL文件。无法直接运行或者调试,可以间接使用。
2.写LabVIEW程序
程序框图页面——互联接口——库与可执行程序——调用库函数节点
选择刚刚生成的DLL文件,并选择函数名。
配置形参和返回值,必须和函数原型一模一样,否则运行有误或者无反应。设置返回值为I32数值。添加一个输入,配置为I32一维数组。
连接相关的组件。
前面板输入相关元素的值,并点击运行,出现正确的结果。
示例二
如何解决返回类型没有数组、指针的问题?如果针对一个数组处理后,想要返回整个数组,但是发现返回类型选项中只有空void、数值和字符串。我以一个将数组中元素全部向后位移一位的例子说明。
其实很简单,调用库函数节点默认会“返回”输入的所有形参,那我们只要获取到经过运算后的数组即可。当然,如果设计到多个数组运算或者其他较复杂的运算,你也可以自己在添加一个符合条件的形参,用于保存想要返回的计算结果,做间接的返回数组。
位移函数:
extern "C" __declspec(dllexport) void move(int raw[10])//间接返回raw[10]
{
int temp = raw[0];
for (int i = 0; i < 9; i++)
{
raw[i] = raw[i + 1];
}
raw[9] = temp;
}
labview:
点击运行后发现移位正常