一部のハードウェアと通信する外部C++ライブラリとMATLABをインターフェイスするmexファイルを作成しようとしています。インポートされたライブラリとプリコンパイルされたDLL(.libおよび.dll)は、私のバージョンのVC ++用にハードウェアベンダーから提供されており、問題なくC++で実装できました。
ただし、コードがmex(同じバージョンのVC ++でコンパイルされたもの)として記述されている場合、実行時にセグメンテーションエラーが発生しました。VC ++デバッガーで調査した結果、外部dll関数の1つがデータ型std :: vectorを返し、関数内のどこかにベクターコンテナーにメモリを動的に割り当てようとしていることが原因である可能性があります。自分のmex関数でstd::vectorを使用すると、すべてが正常に機能することはわかっていますが、すべての動的に必要なメモリ管理(?)のために、mexヘッダー自体がstd::vectorコンテナーを自分のコードでラップしていると思われます。 mexコードでメモリを割り当てましたが、プリコンパイルされた.dllでは同じことはできません。
ここで問題は、外部.dllファイルを変更できず、そのソースファイルにアクセスできないため、ダイナミックメモリがMATLAB(おそらく何らかのラッパー)によって管理されるように、この外部dllを操作する方法はありますか。 。?)...そしてそれによってセグメンテーションエラーを回避し、正しいデータを返しますか?または、私の分析が間違っている場合は、私も訂正してください!
アイデアやハックがあれば教えてください、ありがとう!
私のシステム:Windows 7 SP1 32ビット、MATLAB 2009b、Visual C ++2008Pro。
同じ質問を次の場所にも投稿しました:http: //www.mathworks.com/matlabcentral/answers/9294-mex-dynamic-memory-management-issue-with-std-vector-in-linked-external-dll-segmentation-エラー 。アカウントをお持ちの場合は、そこで洞察を共有することもできます。ありがとうございます。