2016-04-29 7 views
2

を使用Matlab Compiler SDK私はMatlabコードをC#アプリケーションでロード可能なdllにデプロイできます。 今、matlabコマンドNET.addAssemblyを使用して、Matlabコードに.NET参照を追加します。 Matlabでコードを実行すると、私がインポートしたクラスのメソッドにアクセスできます。残念ながら、Matlabコードをコンパイルすると(追加された.net参照)、通常のDLLを持っているようです。私のMATLABコードでインポートした.netクラスのメソッドはもう見えません。(matlabはエラー "No "MyNameSpace.MyClass"クラスの適切なメソッド、プロパティ、またはフィールド 'MyMethodName' "。 私に助けをすることができる人はいますか?ありがとう前もって。ありがとう。その理由は、別のC#dllを参照するMatlabのコンパイルされたdllを参照しているからです。その理由は、私の(大きな)Matlabプロジェクトをac#に変換する必要があるためです。配備されたmatlab dllで.NETメソッドを使用できません

+1

私は同じ種類の操作(matlabコードから手作りの.netアセンブリを呼び出して、この最後のものをコンパイルします)を実行していますが、問題はありません。すべてのアセンブリファイルをコンパイルプロセス(matlabコンパイラオプションの '-a')に追加して、それらが最後にコンパイルされたものですか?非常に可能性がある場合は、オブジェクトをインスタンス化することができますし、メソッドが見つかりませんは、コンパイルされたMATLABコードに関連付けられている最後にコンパイルされたアセンブリではないということです。 – CitizenInsane

+0

@CitizenInsane Matlabのドキュメンテーションから分かっているところでは、-aオプションは依存関係解析関数( 'depfun')によって自動的に見つけられないファイルに対してのみ必要です。特に、-aオプションを使用して、MEX-ファイル、DLL、または共有ライブラリのすべての依存関係を追加する必要があります。しかし、私のdllには依存性がないので、-aオプションを追加する必要はありません。 'NET.AddAssembly'はdllへの絶対パスを必要とするので、プロダクションPC上の同じ場所にdllを置くだけでよいのです。実際、エラーの原因は異なっていました(私の解決策参照)。 – Homer1982

+0

@CitizenInsane「ホームメイド」の.netアセンブリをデバッグするために、メインアプリケーションのプロセスにアタッチすることもできますか? – Homer1982

答えて

1

エラーは、同じ名前のクラスがあるという事実によって引き起こされます。主アプリケーション内の同じ名前空間(すなわち、 MyNameSpace.MyClass)。これは、私がMatlabからロードするアセンブリで定義されているクラスを隠しているようです。

Matlabで読み込んだクラスの名前空間の名前を変更しました。

関連する問題