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

您所在的位置:网站首页 输出指针地址怎么设置 LabVIEW调用函数返回指针的动态链接库DLL

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

2024-07-13 06:13| 来源: 网络整理| 查看: 265

LabVIEW调用函数返回指针的动态链接库DLL 引言创建动态链接库LabVIEW中调用DllMian.dll结束语

引言

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

创建动态链接库

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

#include // 也可以 #include #include _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 获取单值指针数据 在LabVIEW新建一个vi,拖一个调用库函数节点到程序框图中,双击节点弹出配置对话框,函数及参数配置如下图所示: 打开动态连接库DllMain.dll,选择GetSingleData库函数 在参数栏中设置返回类型 再拖一个调用库函数节点到程序框图中,双击节点弹出配置对话框,如下图所示,在库名栏中直接输入LabVIEW,在函数名栏中选择MoveBlock。 在库名中直接输入LabVIEW,在函数名中选择MoveBlock 在参数栏中新建三个参数,分别为Address、MySingleData、Size,数据类型分别设置如下图所示: 设置Address数据类型 设置MySingleData数据类型 设置Size数据类型 创建的程序框图及运行结果如下图所示(和库函数中的变量数据是一致的): 程序框图配置及运行结果获取数组指针数据 在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还可读取更复杂类型的数据,具体参见这篇文章。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3