4

我正在使用 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 页!)。

4

5 回答 5

2

我不再拥有 Builder NE,但如果我没记错的话,您可以执行以下操作:

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

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

MWArray在、MWCellArrayMWStructArray和types上使用 IntelliSense 和类浏览器MWNumericArray比 MATLAB 文档有用得多。

不过,说了这么多,我对您addValue通话中的第一个参数感到困惑?

于 2010-03-30T08:46:44.500 回答
1

您在即时窗口中看到的内容告诉您 result[0] 包含一个二维数组,该数组在两个维度上的长度均为 1。数据位于 [0,0] 元素中,因为数组是从 0 开始的。

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

int x = ((int[,])result[0])[0,0]
于 2010-03-30T03:48:26.670 回答
0

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

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

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

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

于 2010-03-30T00:38:00.193 回答
0

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

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

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

于 2010-03-30T00:47:33.743 回答
0

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

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

然后你可以转换为int

int x = Convert.ToInt32(suma);
于 2013-03-16T19:50:22.883 回答