この現象は DLL がどのようにメソッドを公開しているかによります。MATLAB が DLL 内の特定の関数の呼出規約を理解できないケースはあり得ます。この関数は STDCALL を使用しているかもしれず、これがクラッシュの原因である可能性もあります。このエラーはいくつかの場合で起こります。
- 空の stack trace 付近でエラーとなる。
- 特定のコンパイルオプションやヘッダファイルが必要な MEX ファイルの実行時にエラーとなる。
- 過去バージョンの MATLAB で動作していたが、新しいバージョンではエラーとなる
解決するためには、PROTOTYPE ファイルを生成し、そのファイルに記述されている関数の定義、呼び出し方法を修正します。
1. LOADLIBRARY 実行時、'mHeader' オプションを使用してプロトタイプファイルを生成します。
[notfound, warnings] = loadlibrary('library.dll', 'library.h', 'mfilename', 'mHeader');
2. ライブラリをアンロードします。
3. プロトタイプファイル 'mHeader.m' ファイルを編集します。実際には 'cdecl' を 'stdcall' に変更します。
4. プロトタイプファイルを使用してライブラリをロードします。
[notfound, warnings] = loadlibrary('library.dll',@mHeader);
注意:
上記は R2008a 及びそれ以降のバージョンで必要です。R2007b 及びそれ以前のバージョンでは不要です。