2017-04-01 4 views
1

私は、matlabコードからjavaパッケージをコンパイルしたいと思います。 私はMathWorks社のMATLABでクラスを持っている:どのようにmatlabコンパイラsdkでクラスをコンパイルするには?

classdef MyClass 
    properties 
     Prop1 
    end 
    events 
     Event1 
    end 
    methods 
     function obj = MyClass() // no arguments 
     if nargin > 0 
      obj.Prop1 = arg; 
     end 
     end 
    end 
end 

は、私はそれをコンパイルしようとしたが、それは仕事をdoesntの。クラスをコンパイルすることはできません。だから私はラッパー関数を書こうとします。私のラッパー関数で私は私のclassdefスクリプトを呼び出して、オブジェクトを返します。 私はこの関数をコンパイルできますが、javaではargumentsを渡す必要があります。しかし、matlabのクラスコンストラクタには引数がありません。

Javaで私はClass1を持って、私はそれの新しいオブジェクトを作成します。 このオブジェクトは、今私に私コンストラクタへのアクセス権を与える:MATLABコンパイラSDKは関数のみをコンパイルすることができますので、

Class1 matlabClassTest = new Class1(); 
matlabClassTest.MyClass(???); // her it ask for arguments 

答えて

0

クラスの機能をラップする必要があります。

これは、クラスの場合:

classdef MyClass 
    properties 
     Prop1 
    end 

    methods 
    function obj= doSomething(obj,x) 
     obj.Prop1=x; 
     end 
    end 
end 

は新しいメートルを作成します。あなたのコンストラクタWrapper関数のためのファイル。この関数は、クラスのオブジェクトを返します。

function obj=createMyClassObject() 
obj=MyClass(); 
end 

新しいmを作成します。ラッパー関数を持つファイル Wrapper関数は引数として渡されたobjを返します。

function obj= doSomethingWrapper(obj,x)  
obj.doSomething(x) 
end 

Matlab Compiler SDKで両方の機能をコンパイルします。クラスMyclass m Fileも同じディレクトリになければなりません。 Matlab Compiler SDKは自動的に依存関係を認識し、コンパイラオプションで表示します。

Javaでは、createMyClassObject()関数を呼び出すことができ、Matlabオブジェクトを受け取ることができます。このオブジェクトをdoSomethingWrapper()関数に渡します。

関連する問題