【C#】VS2015调用Matlab2016a生成的dll文件、MWArray数据类型转换

系统环境:

  1. 用于生成dll文件的电脑:VS2015专业版,Matlab2016a,均为64位
  2. 用于调用dll文件的电脑:VS2015社区版,64位

生成dll文件

这部分网上教程非常多,可以参考:[MATLAB]将.m文件生成dll文件

主要注意的几点:

  • visual studio要安装专业版,详见官方System Requirements and Supported Compilers
  • VS安装时,自定义功能时要选择“适用于Visual C++2015的公共工具”和“Visual Studio扩展性工具”。
  • Matlab要是已经激活状态。

首次生成的步骤分3步(后面再生成只需要用deploytool):

  • Matlab的命令行窗口输入mbuild -setup
  • Matlab的命令行窗口输入mex -setup C++;
  • Matlab的命令行窗口输入deploytool,选择Library Compiler

调用dll

主要也是平台匹配的问题:

  • VS2015的安装需要选择“适用于Visual C++2015的公共工具”和“Visual Studio扩展性工具”。(调用可以用社区版的VS,生成只能用专业版)
  • 添加导出的dll文件和MWArray.dll(C:\ProgramFiles\MATLAB\R2016a\toolbox\dotnetbuilder\bin\win64\v2.0)的引用;
  • 工程文件的首行添加如下信息
using MathWorks.MATLAB.NET.Utility;
using MathWorks.MATLAB.NET.Arrays;
using matlab_class;
  • VS2015的“属性——>生成——>目标平台” 选择 x64

VS2015的参考安装项如下
在这里插入图片描述

在这里插入图片描述

MWArray数据类型

MWArray是MathWorks公司为其他语言调用matlab编译的dll设计出的一种数据类型。C#需要通过MWArray与MATLAB的数据进行互通,数据类型映射规则如下:

.NET TypeMWArray TypeMATLAB Type
System.DoubleMWNumericArraydouble
System.NumberMWNumericArraydouble
System.FloatMWNumericArraysingle
System.ByteMWNumericArrayint8
System.ShortMWNumericArraynt16
System.Int32MWNumericArrayint32
System.Int64MWNumericArrayint64
System.CharMWCharArraychar
System.StringMWCharArraychar
System.BooleanMWLogicalArraylogical
N/AMWStructArraystructure
N/AMWCellArraycell

MATLAB生成的dll文件,返回的数据都是MWArray类型的,这是个抽象类,需要先转换成MW*****Array子类型,然后再转换成C#的数据类型。

  • MWArray——>C#数字
MWArray aaa = 10;
MWArray bbb = 10.1
int ccc = (MWNumericArray)aaa.ToScalarInteger();
double ddd = (MWNumericArray)bbb.ToScalarDouble();
  • MWArray——>C#字符串
MWArray ccc = "matlab";
string str = (MWCharArray)ccc.ToString();
  • MWArray——>C#二维数组
MWArray aaa = new double[2, 2] { { 1.1, 2.2 }, { 3.3, 4.4 } };
Array arr = (MWNumericArray)aaa.ToArray();
double[,] bbb = (double[,])arr;
  • MWArray——>C#一维数组
MWArray aaa = new double[] { 1.1, 2.2 };
Array arr = ((MWNumericArray)aaa).ToVector(MWArrayComponent.Real);
double[] bbb = (double[])arr;
// ToVector中的MWArrayComponent.Real是指复数中的实部。

更多关于MWArray数据类型的介绍可以参考:https://blog.csdn.net/zwjabcd/article/details/50663134

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值