У меня есть проект, написанный на управляемом Visual C ++ (Visual Studio 2010). Поддерживать создание файлов в .мат формат, я использую две библиотеки «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 ++.
Любой вклад будет оценен.
Задача ещё не решена.
Других решений пока нет …