首页 > 其他分享 >调用labview生成的dll文件中包含 labview的2维数组作为输出输出时,如何操作

调用labview生成的dll文件中包含 labview的2维数组作为输出输出时,如何操作

时间:2023-11-26 21:46:12浏览次数:36  
标签:输出 DoubleArray element cArray labview arrayIn dll arrayOut

以前使用 python 调用 labview 生成的dll时,如果直接使用labview本身的二维数组,程序就会自己崩溃,也无法使用,但由于二维本质就是一维,所以用的一维加行列可以解决这个问题,绕开了这个labview二维数组的结构
但是最近有研究了一下,发现可以解决这个问题,现在记录如下,

首先,从网上找到了一些参考


typedef struct {
	int32_t dimSizes[2];
	double element[1];
} DoubleArrayBase;
typedef DoubleArrayBase **DoubleArray;

DoubleArray __cdecl AllocateDoubleArray (int32_t *dimSizeArr);
MgErr __cdecl DeAllocateDoubleArray (DoubleArray *hdlPtr);


// In your code
#include "mydll.h"

int main()
{
	// Allocate and write the input array
	int32_t datasz[2] = {2, 3};
	DoubleArray arrayIn = AllocateDoubleArray(datasz);
	(*arrayIn)->element[0] = 1;
	(*arrayIn)->element[1] = 2;
	(*arrayIn)->element[2] = 3;
	(*arrayIn)->element[3] = 11;
	(*arrayIn)->element[4] = 12;
	(*arrayIn)->element[5] = 13;

	// Call your function
	DoubleArray arrayOut;  // 这里后面会说,需要修改下~
	Linear_discrim_4dll(&arrayIn, &arrayOut, 2, 3);

	// Extract data from the output array, ASSUMING the output is 2x2
	double cArray[2][2];
	cArray[0][0] = (*arrayOut)->element[0];
	cArray[0][1] = (*arrayOut)->element[1];
	cArray[1][0] = (*arrayOut)->element[2];
	cArray[1][1] = (*arrayOut)->element[3];

	// Free the input array's memory
	DeAllocateDoubleArray(&arrayIn);

基本是这个思路,但是我在处理过程中,发现,需要把

DoubleArray arrayOut = AllocateDoubleArray(datasz);

就是输出的二维数组对象,也需要先 allocate 一下,先申请一下内存,要不也会崩溃。

另外,在clion中使用cmake时,labview自带的库无法编译会报错使用找不到对应的 compiler,用的viusal studio 进行的编译成功
typedef struct {
int32_t dimSizes[2];
double Numeric[1]; //我的结构体重是 Numeric,不是element
} DoubleArrayBase;

参考:
https://lavag.org/topic/20486-lv-dll-creates-mysterious-doublearray-class/

标签:输出,DoubleArray,element,cArray,labview,arrayIn,dll,arrayOut
From: https://www.cnblogs.com/Nicoooolas/p/17858014.html

相关文章

  • Qt导出与加载dll
    先开篇,后期更新整理 1、Qt插件开发-夕西行-博客园(cnblogs.com)2、Qt插件开发方式-夕西行-博客园(cnblogs.com)2、Qt插件开发-夕西行-博客园(cnblogs.com) ......
  • python 加载dll的类
    Python加载DLL的类在Python中,我们可以使用ctypes模块来加载并调用DLL(DynamicLinkLibrary)文件中的函数。DLL是一种包含可供程序调用的函数和数据的动态链接库。通过加载DLL,我们可以在Python程序中使用其他编程语言编写的功能强大的库。本文将介绍如何使用Python加载DLL的类,并提......
  • PC8231恒流恒压输出同步降压芯片5V/2.4A内置限流补偿带EN引脚
    一.概述PC8231是一款同步降压转换器,该转换器可驱动输出2.4A负载电流。设计允许PC8231在9V到40V宽输入电压范围内工作。通过将COMP/EN引脚逻辑电平拉低来实现外部关断功能,并进入待机模式。外部补偿使反馈控制环路具有良好的线压调整率和负载调整率,且外围设计灵活。PC8231......
  • office the language DLL 'VBE7INTL.DLL' is not be found
    其实是缺少vba,安装组件就可以了解决方案:在卸载程序的面板中,找到office,右键选择更改,选择添加或删除功能,勾选如下两项就可以了记得关掉office后再打开就好了......
  • 2023版 STM32实战6 输出比较(PWM)包含F407/F103方式
    输出比较简介和特性-1-只有通用/高级定时器才能输出PWM-2-占空比就是高电平所占的比例-3-输出比较就是输出不同占空比的信号 工作方式说明 -1-1-PWM工作模式  -1-2-有效/无效电平 有效电平可以设置为高或低电平,是自己配置的 周期选择与计算 周期=重装载......
  • 输出鞍点的行列下标
    7-7输出鞍点的行列下标目录目录7-7输出鞍点的行列下标目录题目代码思路1(错误)第一次思路2题目一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。本题要求编写程序,求一个给定的n阶方阵的鞍点的行列值。输入格式:输入第一行给出一个正整数n(1≤n≤6),随......
  • Golang学习笔记-自定义日志轮转及输出
    packagepkgimport( "fmt" "log" "log/slog" "os" "time")varcontrolLogger*slog.LoggervarfileLogger*slog.Loggerconst( timeFormat="2006-01-02")funcInitLog(filepathstring){......
  • Fortran 中write函数用法详解及格式化输出简介
    目录write函数用法详解及格式化输出简介write的最基础用法print格式化输出常用格式控制符详解Iw.[m]Fw.dEw.d[Ee]Dw.dAwnXLw字符串/不常用格式控制符详解Gw.d[Ee]TcTLnTRnSP,SSBN,BZkPBw[.m]Ow[.m]Zw[.m]使用print进行格式化输出附录format命令格式控制符号表参考write函数......
  • 您可以尝试添加 --skip-broken 选项来解决该问题 ** 发现 2 个已存在的 RPM 数据库问
    ##提示如下**Found2pre-existingrpmdbproblem(s),‘yumcheck’outputfollows:2:postfix-2.10.1-7.el7.x86_64hasmissingrequiresoflibmysqlclient.so.18()(64bit)2:postfix-2.10.1-7.el7.x86_64hasmissingrequiresoflibmysqlclient.so.18(libmysqlclient_18)......
  • C语言基本功: float格式输入与输出,6位有效数字,6位小数
    可以看这个题目,要求保留6位有效数字(也就说说6个数字位有效,而不是保留6位小数)洛谷地址:https://www.luogu.com.cn/problem/P5714传送门:https://juejin.cn/s/c%E8%AF%AD%E8%A8%80%E4%BF%9D%E7%95%99%E5%85%AD%E4%BD%8D%E6%9C%89%E6%95%88%E6%95%B0%E5%AD%97  常规的控制输出......