2010-03-30 3 views
3

Я использую MATLAB Builder NE (встроенный сборщик .NET сборки MATLAB), но у меня проблема с типами данных.MATLAB Builder NE (сборка .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 casting (int) не работает. Компилятор заявляет, что он не может преобразовать объект [] в int.

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

ответ

0

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

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

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

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

+0

'MWArray' (и все классы, производные от него) имеют один на основе индексации, а не с нуля (как матриц MATLAB) – Amro

0

В результате Object [], потому что Matlab может возвращать вектор параметров результата.

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

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

+0

, к сожалению, , когда я делаю это, я получаю: «Невозможно неявно преобразовать тип» object [] 'в' int [] ' – Brett

1

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

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

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

Я больше не 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?

+0

Я думаю, что MATLAB Builder NE генерирует несколько интерфейсов для функции addValue, один из которых принимает в качестве первого ввода число вывода (более полезно при работе с varargin/varargout) – Amro

0

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

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

Затем вы можете преобразовать в int

int x = Convert.ToInt32(suma);