matlab にロードする必要がある他の多くの c++ ライブラリ (IPP、Opencv +++) を使用する C++ dll ファイルがあります。これどうやってするの?
loadlibrary と mex を試しました。ロード ライブラリが機能しません。
mex は Linux のもの (プラットフォームに依存しないライブラリ) を見つけて、それらを含めようとします。そして、それはうまくいきません。
誰か良いアイデアはありますか?
matlab にロードする必要がある他の多くの c++ ライブラリ (IPP、Opencv +++) を使用する C++ dll ファイルがあります。これどうやってするの?
loadlibrary と mex を試しました。ロード ライブラリが機能しません。
mex は Linux のもの (プラットフォームに依存しないライブラリ) を見つけて、それらを含めようとします。そして、それはうまくいきません。
誰か良いアイデアはありますか?
loadlibrary が動作するはずです。C++ で記述された dll から C ラッパーを使用して関数を呼び出すために、常に使用しています。
loadlibrary を使用しようとすると、どのようなエラーが発生しますか?
dll のエクスポートされた関数が C++ 関数ではなく、C 関数であることを確認してください。そうでない場合は、C ラッパーを記述します。
loadlibrary を使用するときに何をしているのかについての詳細情報が役立ちます。
他の人が述べたように、最初にC++ライブラリをCライブラリとしてラップする必要があります.mathworksは、mexでC++コードを直接使用しないようにアドバイスしていました(C++コアを直接dlopeningするのは複雑です).おそらくそれはまだ真実です.
あなたの説明も非常に不明確です.「mexがLinuxのものを見つける」とはどういう意味ですか?しかし、それは機能しません。動作しないと言っても役に立ちません。正確なコマンドとエラー メッセージは次のとおりです。
Java アプローチを選択できます (Matlab は JRE で実行され、Java オブジェクト/メソッドにアクセスできるため、Matlab JRE は最新の JRE ほど最新ではないことに注意してください。私が実行しているものは、 Java 1.5) を使用し、JNAを使用して DLL にアクセスします。
または、最上位の DLL を作成した場合は、COM/ActiveX アプローチを採用できます。
C++ 関数へのインターフェイスを COM/ActiveX ライブラリとして設計することに成功しました。その .h を気にする必要はありません。
COM クライアントの外部インターフェイスガイド、特にデータの管理/変換に関する部分を参照してください。
COM/ActiveX 層を追加するのは余分な作業ですが、ライブラリを Windows の世界で移植しやすくし、おそらく MATLAB でより簡単に使用できるようにします。
DLL への関数呼び出しが多い場合は、COM/ActiveX アプローチの方が高速かもしれませんが (確かではありません)、それ以外の場合は JNA アプローチの方が簡単だと思います。