在不使用 mex 的情况下将 C++ 回调作为函数句柄传递给 matlab 引擎

Passing C++ callbacks to matlab engine as function handles without using mex

我的项目是用 C++ 编写的。我想通过 "eval" 通过 matlab 引擎使用 matlab 优化 nonlinsq。我想以

的格式传递我用 C++ 编写的函数
    void func(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[]) 

将 matlab 作为函数句柄而不将其编译为 mex。

我尝试按照 Passing C/C++ callbacks into the matlab engine 创建 mxArray,然后将其传递给 matlab 工作区:

    mxArray *fh = mclCreateSimpleFunctionHandle(func);
    engPutVariable(engine, "func", fh);
    mxDestroyArray(fh);

但程序在第一行因访问冲突而崩溃。在调用堆栈中,违规前的最后一次调用是 "mclmcrrt8_5.dll!000000000031dacd() Unknown"

有什么问题?..

让 MATLAB run-time 引擎 解释 C/C++ 代码是错误的方法(我敢肯定这是不可能的此时)。您所指的 post 假定 C/C++ 代码被编译成共享对象或动态链接库。 mex 函数本身需要一个支持的编译器,可以调用它来创建 .mex 文件。

TLDR: MATLAB 无法解释 C/C++ 代码。