DLL 内の関数をコールすると MATLAB がクラッシュするのはなぜですか?

MATLAB 7.6 (R2008) にて DLL を使用すると MATLAB がクラッシュします。Stack Trace が短く、原因の特定が困難です。R2007b では同じ記述のプログラムが動作します。

 Accepted Answer

MathWorks Support Team
MathWorks Support Team on 8 Apr 2015

0 votes

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

More Answers (0)

Products

Release

R2008a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!