gpt4 book ai didi

c++ - 将 C/C++ 回调传递到 matlab 引擎中

转载 作者:太空狗 更新时间:2023-10-29 20:00:03 24 4
gpt4 key购买 nike

我有一个 C++ 文件:

  • 启动matlab引擎
  • 调用 matlab_optimize()(内部运行其中一个 matlab 优化器的已编译 m 文件)
  • 打印结果
  • 停止引擎并退出

这很好用。我现在想把第二行改成

  • 调用 matlab_optimize(obj_fun)

其中 obj_fun() 是在我的 C++ 代码中定义的一个函数,它本身将回调到其他代码中。本质上,我希望 matlab_optimize 内部使用的 matlab 优化器使用我提供的函数指针作为目标函数。

我不能将 obj_fun() 编译为独立的 mex 文件,因为我希望它与启动 matlab 引擎(驱动整个引擎)的 c++ 进程通信。

A newsgroup post from 2009似乎表明这是不可能的。然后又是 Matlab C++ 数学库工具箱 does seem to be able to do this .

也用谷歌搜索 reveals this generated snippet :

/*
* Register a function pointer as a MATLAB-callable function.
*/
extern void mexRegisterFunction(void);

这似乎正是我想要的,但该文件来自 2000 年,而且我在 matlab 文档中的任何地方都没有找到对这个函数的引用。那么如何使用呢?

最佳答案

您可以使用 mclmcrrt.h 头文件中的 mclCreateSimpleFunctionHandle 函数来实现此功能。

它将具有原型(prototype) 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));

在 MATLAB 方面:

function [] = matlab_function(function)
function(<any variable>)
end

关于c++ - 将 C/C++ 回调传递到 matlab 引擎中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9068558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com