2012-01-12 2 views
3

私はC#でインスタンス化したい基本的なMatlabクラスを持っています。コンパイル済み.NETアセンブリでMatlabオブジェクトを使用するにはどうすればよいですか?

classdef MyClass 
    properties 
     Value 
    end 

    methods 
     function obj=MyClass(v) 
      obj.Value = v; 
     end 

     function display(obj) 
      disp(obj.Value); 
     end 
    end  
end 

次いで、これ.DLLファイルに組み込まれ、関連したMatlabの名前空間(MathWorks.MATLAB.NET.Arrays、MathWorks.MATLAB.NET.Utility)と一緒にC#プロジェクトにインポートされます。 C#の側

、私はこのように、このクラスのインスタンスを構築しようとしています:

 Untitled2.MLTestClass matlab = new Untitled2.MLTestClass(); 
     MWCharArray input = new MWCharArray("Initial");      
     MWArray[] result = matlab.MyClass(1, input); 

コードの最後の行の終わりまでには、result.Length = 1と結果[0] = NULL 。私は何とか新しく作成されたMatlabオブジェクトへの参照を何とか取得することを何とか期待していました。私は疑問に思っていました、これも可能ですか?そしてもしそうなら、これはどのように達成できますか?もしそうでなければ、その周りに道があるのでしょうか? (私は基本的に、Matlabに統合したくないGUIコンポーネントをC#で作成していますが、むしろ逆の方法です)。

答えて

2

.NETアセンブリ内でMatlabクラスを使用するのはnot possibleです。 あり、多くの回避策は以下のとおりです。

  1. グローバルとして、あなたの変数を定義し、
  2. は、構造体のフィールドの値としてごMatlabのクラスを返します。そのメソッドをラップするいくつかの機能を持つアクセスを。ここで

は、(1)のためのコードスニペットです:コードスニペットとリンク自体:)偉大な答えを

function CreateMyClass(st) 
    global myClass; 
    myClass = MyClass(st); 
end 

function DisplayMyClass() 
    global myClass; 
    myClass.display(); 
end 
+0

おかげで、洞察力であることが証明されています。 – filipcampeanu

+0

@ andrey-rubshtein現在、これを実行する最善の方法は何ですか?私はmatlabで複数のクラス(複数のメソッドを持つ)があり、各クラスはデモスクリプトを持っています。私は各クラスのための1つの.NETアセンブリを生成したいと思います。 – nabrugir

関連する問題