2010-03-30 106 views
3

我使用MATLAB生成器NE(MATLAB的集成.NET程序集生成器),但我有數據類型的問題。MATLAB生成器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轉換(int)不起作用。編譯器指出它不能將object []轉換爲int。

有沒有人有MATLAB中的.NET建設者,可以幫助我這方面的經驗?它真的把我扔了一圈。我已經通過大部分的MATLAB BUILDER文檔(484頁!)掃描了零幫助。

回答

0

當我這樣做,我也得到一個轉換錯誤。不過,我輸入:

結果[0]到中間的窗口,並將其與回來:

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

我只是不能孤立「7」,它讓我發瘋了。 :-)

+0

'MWArray'(以及它的衍生的所有類)有,而不是從零開始的(就像MATLAB矩陣)基於一個索引 – Amro 2011-09-25 21:36:22

0

結果是Object [],因爲Matlab可以返回結果參數的向量。

我沒有使用Matlab NE一段時間,所以我不記得確切的語法,但是, Matlab使用MWArray的,你必須檢查MWArray的成員,看看你有什麼權限。

我覺得result [0]是一個包含int的MWArray。

+0

不幸,當我這樣做時,我得到:「不能隱式地將類型'object []'轉換爲'int []' – Brett 2010-03-30 00:52:54

1

你們看到在即時窗口是告訴你結果[0]包含一個二維數組,它是在兩個維度上的長度1的。數據位於[0,0]元素中,因爲該數組是基於0的。

下投相貌醜陋,但將分配7到X:

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

我不再生成器NE,但如果我沒有記錯的話,你可以這樣做:

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

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

使用智能感知和對MWArrayMWCellArrayMWStructArrayMWNumericArray類型類瀏覽器是很多比MATLAB文檔更加有用。

儘管如此,我很困惑您的addValue調用中的第一個參數?

+0

我認爲MATLAB Builder NE爲'addValue'函數生成多個接口,其中一個接受第一個輸入的數量輸出參數(在處理varargin/varargout時更有用) – Amro 2011-09-25 21:59:07

0

在我的特殊情況下,我有double結果。

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

然後你可以轉換爲int

int x = Convert.ToInt32(suma);