LabVIEW调用函数返回指针的动态链接库DLL

LabVIEW调用函数返回指针的动态链接库DLL

引言

LabVIEW通过调用库函数节点可以调用C/C++生成的动态链接库。首先在VC/CVI/Matlab等语言中设计好完成计算处理任务的动态链接库,通过配置调用库函数节点调用动态链接库中相应的库函数,获取所需的处理结果。在LabVIEW中,通过库函数输出参数(指针或数组参数)以及库函数返回单值获取数据有完善的解决办法,可以参考这篇文章。本文讲述获取函数返回值为指针(含单值和数组指针)数据的方法。
LabVIEW调用库函数节点返回值只有空、数值和字符串三种类型,似乎无法返回指针数据(数组),其实是有解决办法的:对于返回指针的函数,返回的数值为存放数据的地址(对于数组,则为第一个元素的地址),用LabVIEW内置函数MoveBlock即可获取具体数据,下面以具体实例讲解创建DLL及调用、获取数据过程。

创建动态链接库

在VC6.0中创建动态链接库项目文件DllMain(创建过程略),代码文件main.cpp如下所示:

#include <objbase.h>  // 也可以 #include <windows.h>
#include <stdio.h>
_declspec(dllexport) double * GetDimData(void)
{

    double *p=(double *) malloc(sizeof(double)*3);
	p[0]=1.01;
	p[1]=2.02;
	p[2]=3.03;
    return p;
}
_declspec(dllexport) int * GetSingleData(void)
{
    int *p=(int *) malloc(sizeof(int));
	*p=101;	
    return p;
}

头文件main.h如下所示:

_declspec(dllexport) double * GetDimData(void);
_declspec(dllexport) int * GetSingleData(void);

生成动态链接库DllMain.dll。

LabVIEW中调用DllMian.dll

  1. 获取单值指针数据
    在LabVIEW新建一个vi,拖一个调用库函数节点到程序框图中,双击节点弹出配置对话框,函数及参数配置如下图所示:
    打开动态连接库DllMain.dll,选择GetSingleData库函数
    在参数栏中设置返回类型
    再拖一个调用库函数节点到程序框图中,双击节点弹出配置对话框,如下图所示,在库名栏中直接输入LabVIEW,在函数名栏中选择MoveBlock。
    在库名中直接输入LabVIEW,在函数名中选择MoveBlock
    在参数栏中新建三个参数,分别为Address、MySingleData、Size,数据类型分别设置如下图所示:
    设置Address数据类型
    设置MySingleData数据类型
    设置Size数据类型
    创建的程序框图及运行结果如下图所示(和库函数中的变量数据是一致的):
    程序框图配置及运行结果
  2. 获取数组指针数据
    在LabVIEW新建一个vi,拖一个调用库函数节点到程序框图中,双击节点弹出配置对话框,函数及参数配置如下图所示:
    打开动态链接库DllMain.dll
    设置返回类型
    再拖一个调用库函数节点到程序框图中,双击节点弹出配置对话框,如下图所示,在库名栏中直接输入LabVIEW,在函数名栏中选择MoveBlock。
    在库名中直接输入LabVIEW,在函数名中选择MoveBlock
    在参数栏中新建三个参数,分别为Address、MyDimData、Size,数据类型分别设置如下所示:
    设置Address类型
    设置MyDimData类型
    设置Size类型
    创建的程序框图及运行结果如下图所示(和库函数中的数组数据是一致的):
    程序框图配置及运行结果
    上面的程序框图中,数字3表示数组元素有3个,8表示双精度数据长度为8个字节,MoveBlock函数从指定地址开始读取3*8=24个字节的数据并转换为双精度一维数组。

结束语

解决本文议题的关键是采用了LabVIEW内置的内存管理函数MoveBlock,通过输入数据地址,MoveBlock可以控制从指定地址开始读取多少字节数据,并将读取的数据转化为具体类型的数据。MoveBlock还可读取更复杂类型的数据,具体参见这篇文章

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值