Мой проект на C ++. Я хочу использовать оптимизацию Matlab nonlinsq
через двигатель Matlab от «Eval». Я хочу передать функцию, которую я написал в C ++ в формате
void func(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])
в Matlab как дескриптор функции без компиляции его в Mex.
Я пытался следовать Передача обратных вызовов C / C ++ в движок matlab для создания mxArray, а затем передать его в рабочую область Matlab:
mxArray *fh = mclCreateSimpleFunctionHandle(func);
engPutVariable(engine, "func", fh);
mxDestroyArray(fh);
но программа вылетела на первой строке с нарушением прав доступа. В стеке вызовов последний вызов перед нарушением был
«mclmcrrt8_5.dll! 000000000031dacd () Unknown»
В чем проблема?..
Запрашивая во время выполнения движок MATLAB интерпретировать код C / C ++ — неправильный способ сделать это (и я уверен, что в данный момент это невозможно). В публикации, на которую вы ссылаетесь, предполагается, что код C / C ++ скомпилирован в общий объект или динамически связанную библиотеку. mex
Сама функция требует поддерживаемого компилятора, который может быть вызван для создания .mex
файл.
TLDR: MATLAB не может интерпретировать код C / C ++.
Других решений пока нет …