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でIntelliSenseとクラスブラウザを使用する方が、MATLABのドキュメントよりもはるかに便利でした。MWCellArrayMWStructArrayMWNumericArray

それでも、あなたのaddValue呼び出しの最初のパラメーターに混乱していますか?

于 2010-03-30T08:46:44.500 に答える
1

イミディエイト ウィンドウに表示されているのは、result[0] に、両方の次元で長さが 1 の 2 次元配列が含まれていることを示しています。配列は 0 ベースであるため、データは [0,0] 要素にあります。

次のキャストは見栄えが悪いですが、x に 7 を割り当てます。

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

それを行うと、変換エラーも発生します。ただし、次のように入力しました。

result[0] を中間ウィンドウに挿入すると、次のように返されました。

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

「7」を分離することができず、気が狂ってしまいます。:-)

于 2010-03-30T00:38:00.193 に答える
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 に答える
0

Matlab は結果パラメーターのベクトルを返すことができるため、結果は Object[] です。

私はしばらく Matlab NE を使用していないので、正確な構文を思い出せませんが、Matlab は MWArray を使用します。MWArray のメンバーを調べて、何にアクセスできるかを確認する必要があります。

result[0] は int を含む MWArray だと思います。

于 2010-03-30T00:47:33.743 に答える