在不使用 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++ 代码。
我的项目是用 C++ 编写的。我想通过 "eval" 通过 matlab 引擎使用 matlab 优化 nonlinsq
。我想以
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++ 代码。