【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 Type MWArray Type MATLAB Type
System.Double MWNumericArray double
System.Number MWNumericArray double
System.Float MWNumericArray single
System.Byte MWNumericArray int8
System.Short MWNumericArray nt16
System.Int32 MWNumericArray int32
System.Int64 MWNumericArray int64
System.Char MWCharArray char
System.String MWCharArray char
System.Boolean MWLogicalArray logical
N/A MWStructArray structure
N/A MWCellArray cell

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章