MATLAB Builder NE (сборка .NET) Вопрос о типе данных - PullRequest
3 голосов
/ 30 марта 2010

Я использую 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.

Есть ли у кого-нибудь опыт работы со сборщиком .NET в MATLAB, который может мне в этом помочь? Это действительно сбивает меня с толку. Я просмотрел большую часть документации MATLAB BUILDER (484 страницы!) С нулевой помощью.

Ответы [ 5 ]

2 голосов
/ 30 марта 2010

У меня больше нет Builder NE, но если я правильно помню, вы можете сделать что-то вроде:

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

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

Использование IntelliSense и браузера классов для типов MWArray, MWCellArray, MWStructArray и MWNumericArray было намного полезнее документации MATLAB.

Сказав все это, я смущен первым параметром в вашем addValue вызове?

1 голос
/ 30 марта 2010

То, что вы видите в ближайшем окне, говорит вам, что результат [0] содержит двумерный массив длиной 1 в обоих измерениях. Данные находятся в элементе [0,0], потому что массив основан на 0.

Следующее приведение выглядит безобразно, но присваивает 7 x:

int x = ((int[,])result[0])[0,0]
0 голосов
/ 16 марта 2013

В моем конкретном случае у меня есть double результат.

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

Тогда вы можете конвертировать в int

int x = Convert.ToInt32(suma);
0 голосов
/ 30 марта 2010

Результатом является Object [], потому что Matlab может вернуть вектор параметров результата.

Я некоторое время не использовал Matlab NE, поэтому не могу вспомнить точный синтаксис, однако, Matlab использует MWArray, вам нужно проверить члена MWArray, чтобы увидеть, к чему у вас есть доступ.

Я думаю, результатом [0] является MWArray, содержащий int.

0 голосов
/ 30 марта 2010

Когда я это делаю, я также получаю ошибку преобразования. Однако я набрал:

результат [0] в промежуточное окно, и он вернулся с:

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

Я просто не могу выделить "7", и это сводит меня с ума. : -)

...