MATLAB Builder NE(.NET Assembly)数据类型问题

时间:2010-03-30 00:00:55

标签: c# .net matlab matlab-deployment

我正在使用MATLAB Builder NE(MATLAB的集成.NET程序集构建器),但我遇到了数据类型的问题。

我在MATLAB中编译了一个非常简单的小函数,并为.NET构建它。我能够调用命名空间甚至函数就好了。但是,我的函数返回一个值,MATLAB默认将其作为object[]数据类型返回。但是,我知道该值是一个整数,但我无法弄清楚如何投射它。

我的MATLAB函数如下所示:

function addValue = Myfunction(value1, value2)

addValue=value1+value2;

end

非常简单吧?

然后在.NET中我可以将其称为:

xClass.addValue (1, 3, 4);

其中xClass是MATLAB构建类的名称,但是当我尝试时:

int x = xClass.addValue (1, 3, 4);

C#出错了。 典型的.NET转换(int)不起作用。编译器声明它无法将object []转换为int。

有没有人在MATLAB中使用.NET构建器可以帮助我解决这个问题?这真的让我陷入了困境。我在零帮助下扫描了大部分MATLAB BUILDER文档(484页!)。

5 个答案:

答案 0 :(得分:2)

我不再拥有Builder NE,但如果我没记错,你可以做类似的事情:

using MathWorks.MATLAB.NET.Utility;
using MathWorks.MATLAB.NET.Arrays;

int x = ((MWNumericArray)(xClass.addValue(1, 3, 4)).ToScalarInteger();

使用IntelliSense和MWArrayMWCellArrayMWStructArrayMWNumericArray类型的类浏览器比MATLAB文档更有用。

尽管如此,我对addValue电话中的第一个参数感到困惑?

答案 1 :(得分:1)

您在即时窗口中看到的是告诉您结果[0]包含两个维度中长度为1的二维数组。数据在[0,0]元素中,因为数组是从0开始的。

以下演员看起来很丑,但会将7分配给x:

int x = ((int[,])result[0])[0,0]

答案 2 :(得分:0)

当我这样做时,我也会收到转换错误。但是,我输入了:

结果[0]进入中间窗口,然后返回:

> {int[1, 1]}
>     [0, 0]: 7

我无法隔离“7”,这让我发疯了。 : - )

答案 3 :(得分:0)

结果是Object [],因为Matlab可以返回结果参数的向量。

我有一段时间没有使用Matlab NE,所以我不记得确切的语法,但是, Matlab使用MWArray,您必须检查MWArray的成员以查看您有权访问的内容。

我认为result [0]是一个包含int。

的MWArray

答案 4 :(得分:0)

在我的特定情况下,我有一个double结果。

 double suma=((double[,])xClass.addValue(1, 3, 4)[0])[0,0];

然后您可以转换为int

int x = Convert.ToInt32(suma);