dgo*_*sen 3 c++ matlab mex matlab-engine matlab-deployment
我有一个C++文件:
matlab_optimize()(在内部运行matlab优化器之一的已编译m文件)这很好用.我现在想把第二行改成
matlab_optimize(obj_fun)obj_fun()在我的C++代码中定义的函数在哪里,它本身将回调到其他代码中.基本上我希望内部matlab_optimize使用的matlab优化器使用我提供的函数指针作为目标函数.
我不能编译obj_fun()成一个独立的mex文件,因为我希望它与启动matlab引擎的c ++进程通信(驱动整个事情).
2009年的新闻组帖子似乎表明这是不可能的.然后,Matlab C++ Math Library Toolbox 似乎也能够做到这一点.
谷歌搜索也揭示了这个生成的片段:
/*
* Register a function pointer as a MATLAB-callable function.
*/
extern void mexRegisterFunction(void);
Run Code Online (Sandbox Code Playgroud)
这似乎正是我想要的,但文件来自2000,我发现在任何地方的matlab文档中都没有引用此函数.那怎么用呢?
您可以使用mclmcrrt.h标头中的mclCreateSimpleFunctionHandle函数来创建此功能.
它将带有原型void(*)(int,mxArray*,int, mxArray)的函数转换为mxArray 结构.
您可以将其传递给MATLAB端函数,并将其称为通用MATLAB函数,而无需对mex文件进行任何操作.
在C/C++方面:
void callback(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])
{
<some manipulations with data>;
}
...
//calling the matlab function
matlab_function(mclCreateSimpleFunctionHandle(callback));
Run Code Online (Sandbox Code Playgroud)
在MATLAB方面:
function [] = matlab_function(function)
function(<any variable>)
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1921 次 |
| 最近记录: |