Передача обратных вызовов C ++ в движок Matlab в качестве обработчиков функций без использования mex

Мой проект на 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»

В чем проблема?..

0

Решение

Запрашивая во время выполнения движок MATLAB интерпретировать код C / C ++ — неправильный способ сделать это (и я уверен, что в данный момент это невозможно). В публикации, на которую вы ссылаетесь, предполагается, что код C / C ++ скомпилирован в общий объект или динамически связанную библиотеку. mex Сама функция требует поддерживаемого компилятора, который может быть вызван для создания .mex файл.

TLDR: MATLAB не может интерпретировать код C / C ++.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]