既知のインターフェイスを備えた Matlab mex ファイルがあります。この mex ファイルは他の人から提供されているため、コードにアクセスできません。C++ で mex 関数を呼び出す効率的な方法はありますか? ありがとう!
3 に答える
の使用を検討しましたmexCallMatlab
か?
mex ファイルを標準の matlab 関数として扱い、 を使用して C++ から呼び出すことができますmexCallMatlab
。
mex ファイルは単なる動的ライブラリです。でそれらをロードし、LoadLibrary
でそれらの関数を呼び出すことができますGetProcAddress
。(または、*nixdlopen
およびで同等にdlsym
)。
MatLab が渡すものと互換性があるようにパラメーターを設定するのは少し面倒ですが、特に難しいことではありません。自分で mex 関数を作成した経験があり、呼び出し規約に精通している場合に役立ちます。
Matlab からのmexext 呼び出しは、システムで許可されている互換性を示します。(32 ビットまたは 64 ビット)
mex でコンパイルされた実行可能ファイルは、C++ 環境の AFAIKから呼び出すことはできません。これらは、Matlab コマンド ウィンドウ/Matlab 関数で動作します。
元:
system("mymex") は次のようなエラーを返します:
'mymex' is not recognized as an internal or external command,
operable program or batch file.
システム ("ttt.mexw32");
will popup a window asking me to select a program to open that file with.
また、あるシステムでコンパイルされた .mexw32/.mexw64 が他のシステムで .exe (実行可能ファイル) と同様に動作する可能性があることにも疑問があります。理由としてはMatlabのリリースバージョンの不一致等が考えられます(よくわからないので一度調べてみてください)
ただし、Mex 実行可能ファイルは Matlab で簡単に使用できます。