LabVIEW调用DLL动态链接库

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:
在这里插入图片描述
点击运行后发现移位正常
在这里插入图片描述

发布了3 篇原创文章 · 获赞 2 · 访问量 1238

猜你喜欢

转载自blog.csdn.net/qq_37769785/article/details/104174423