C#调用Matlab库函数
1. 以C#调用Matlab中dicomread与dicominfo为例编写了此示例。
2. Step1编写C#interface
C#新建类库
添加MWArray.dll引用编写接口,注意设置编译平台为X64或与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 |
注:遵循.NET CLS规范的语言不支持uint16、uint32和uint64类型,但这三个在Matlab中是支持的。所以给.net开发组件时,这三种类型的变量就不能被用于M函数中。最后的structure和cell这两种数据类型在.net中完全无法找到合适的对应类型,用N/A来表示。
3. Step2编写MatlabCode
编写.m库函数
Matlab工具箱deploytool生成dll
Ø Command window中输入deploytool
Ø 选择.Net Assembly,添加相关.m文件
Ø 工程名为MatlabFunction,C#using时用该名
Ø 修改Class1类名为CS_Matlab,C#实例化时用该类
Ø Files required for your library to run中添加DicomInterface.dll
Ø 将MicrosoftFramework设置为3.5
Ø 设置完成后如下图所示,点击Package封装函数
注:最终生成MatlabFunction.dll,MatlabFunctionNative.dll两个文件
4. Step3编写C#TestCode
l 添加C#控制的项目
l 添加MatlabFunction.dll,MatlabFunctionNative.dll,MWArray.dll,DicomInterface.dll引用
l 添加using MatlabFunction,using MathWorks.MATLAB.NET.Arrays
l 解析MWArray数据时先转Array后强制转换为Double[,]类型
l 解析MWStructArray时,通过.FieldNames先获取FileName[]数组,然后.GetField读取文件MWArray最后进行数据转换
l 最终代码如下
源代码及说明文档Word版下载(实在不熟悉CSDN的编辑器囧!!)
http://download.csdn.net/detail/fei13148687/9781816