1

マネージ Visual C++ (Visual Studio 2010) で書かれたプロジェクトがあります。.mat形式のファイルの作成をサポートするために、2 つのライブラリ "libmat.dll" と "libmx.dll" を、対応するヘッダー "mat.h" と "matrix.h" と共に使用します。Matlab をインストールすると、これらのライブラリは Matlab ディレクトリにあります (私は Matlab R2010a を使用しています)。

例:

/* content of mat.h */
...
typedef struct MatFile_tag MATFile;
typedef MATFile* (*matOpen)(const char *, const char *);
...

private: System::Void matToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^  e)
{
  MATFile *pmat;
  mxArray *pa2;
  double data[2] = {0.0, 0.4};  

  matOpen openFunc;

  HINSTANCE hLib = LoadLibrary(L"libmat.dll");  // not equal to NULL
  if (hLib==NULL)
  {
  //some action;
  }

  openFunc =  (matOpen)  GetProcAddress((HMODULE) hLib, "matOpen"); // not equal to NULL
  if (openFunc == NULL)  
  {
    FreeLibrary((HMODULE) hLib);
  }

  HINSTANCE mxLib = LoadLibrary(L"libmx.dll"); // not equal to NULL
  if (mxLib==NULL)
  {
    //some action   
  }

  pmat = openFunc("aaa.mat", "w");
  ...
}

プロジェクトは正常にコンパイルされますが、実行時にopenFuncコマンドを呼び出すと次のエラーが発生します。

An unhandled exception of type 'System.AccessViolationException' occurred in System.Windows.Forms.dll

Additional information: Attempted to read or write protected memory. This is often an  indication that other memory is corrupt.

また、上記の DLL で動作する同様のプロジェクトを作成しましたが、アンマネージ C++ の場合は正しく動作します。この問題はマネージ C++ にのみ存在するようです。

任意の入力をいただければ幸いです。

4

0 に答える 0