c#调用matlab函数时,需要将C#数据类型转换成Matlab数据类型。
此时,需要引用MWArray.dll文件。该程序集包含了与Matlab数据交换的类。其中,MWArray类及每个派生类提供创建和访问 MATLAB 数据类型的方法。
所有类都派生自抽象的 MWArray 类和每个派生类,映射到 MATLAB 数据类型。但同样是抽象的 MWIndexArray 除外。
C#类 | 对应Matlab类型 | |
---|---|---|
MWNumericArray | 数值数组 | 使用此类将c# 数值数组(如int[] )转Matlab数值数组 |
MWLogicalArray | bool数组 | |
MWCharArray | 字符数组 | c#字符串对应Matlab的一个字符数组 |
MWStructArray | 结构数组 | c#对象 |
MWCellArray | 元组数组 | c#泛型集合 |
Matlab函数如下:
function [code,msg] = Test(inta,strp)
% box=[minx,maxx,miny,maxy,minz,maxz ]
%inta = [1,2,3 ]; %数组
%strp = {'Mercury','Gemini','Apollo','Skylab','Skylab B','ISS'}; %元组
%strp2 = { {'Mercury',30},{'Gemini',40},{'Apollo',0}}; %元组
size(strp); % 1行6列
fid=fopen('out.txt','wt');
fprintf(fid,'%s\n',strp{1,2});
code = size(inta);
fprintf(fid,'%g\n',inta(1,2));
msg = 'yesy';
fclose(fid);
return
end
其中
c#代码如下
public int Test(List<double> box, List<string> pathName)
{
MatlabV4.Class1 clazz = new MatlabV4.Class1();
MWNumericArray mw_sigma = new MWNumericArray(box.ToArray());
//
MWCellArray cellArray = new MWCellArray(1,pathName.Count);
// MWNumericArray numericArray = new MWNumericArray();
for (int i = 1; i < pathName.Count + 1; i++)
{
cellArray[1,i] = ((MWCharArray)pathName[i - 1]);
cellArray[1, i] = ((MWCharArray)pathName[i - 1]);
}
var ret= clazz.Test(mw_sigma,cellArray); //返回一个MWArray类型的变量
MWNumericArray arr = (MWNumericArray)ret;
return Convert.ToInt32(arr[1,1].ToScalarInteger());
}