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

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

本文关键字:句柄 函数 引擎 matlab 回调 C++ mex 情况下      更新时间:2023-10-16

我的项目是用C++编写的。我想通过"eval"的matlab引擎来使用matlab优化nonlinsq。我想以的格式传递我用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()未知"

问题出在哪里?。。

要求MATLAB运行时引擎解释C/C++代码是错误的做法(我确信目前不可能)。您所指的文章假设C/C++代码被编译成共享对象或动态链接库。mex函数本身需要一个支持的编译器,可以调用该编译器来创建.mex文件。

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