C++ MATLAB引擎C++回调函数

3

我正在编写一个需要通过matlab引擎完成一些任务的应用程序。然而,在matlab脚本中,我需要一些回调函数。是否可以在matlab脚本中创建回调函数并返回到c++函数中?


如果C++回调函数可以通过输入参数获取所有所需的数据,那么您只需要创建一个MEX文件,并从C++代码调用的Matlab函数中调用它。或者您的用例更加复杂吗? - Itamar Katz
哈,我喜欢这个。我从来没有在引擎函数调用中调用过mex函数。你应该尽量避免在mex内部调用任何新的引擎函数,否则宇宙可能会解体。正如Itamar所指出的那样,你的mex“回调”显然无法访问调用函数的存储。如果你需要这个,你的引擎函数可能需要返回并被重新调用。 - Jonathan
为了学校的一个项目,我们需要创建一个应用程序,我们选择使用C++编写一个手势控制的游戏。然而,手势识别部分是在MatLab中完成的(这是一个要求),并且这基本上是一个单独的应用程序。目前,我正在将需要发送到C++的数据写入MatLab中的队列中,C++应用程序只需在每个更新周期检查队列中是否有任何元素,但我希望有更优雅的解决方案。 - Tiddo
你能提供更多细节吗?你想从Matlab运行什么C++代码?它的目的是什么? - Andrey Rubshtein
Matlab 应该让 C++ 应用程序知道事件已经发生。正如我之前所说,我们的应用程序是一个带有手势控制的游戏。因此,我们需要捕获和处理网络摄像头数据,而不是使用键盘和鼠标事件。这部分工作是在 MatLab 中完成的。然而,MatLab 应该让应用程序知道它已经识别出手势,并且应用程序应该执行哪些操作。最好的情况是,我希望 MatLab 调用一个 C++ 函数,可以更改游戏中的一些变量(例如更新角色的速度)。 - Tiddo
@Tiddo: 使用哪个窗口系统?我会使用 MEX 函数来发布自定义窗口消息,C++ 游戏循环将处理它,就像处理按键,鼠标输入,窗口调整大小事件等一样。 - Ben Voigt
1个回答

1

免责声明:我从未亲自测试过这种方法
您可以使用Matlab Builder NE将您的Matlab代码编译为COM组件来实现它。
该组件将发送COM事件,您的应用程序将订阅它们。
请参阅Matlab Builder NE文档中的"向COM对象添加事件"部分。

您可以在此处了解有关COM的信息:
http://en.wikipedia.org/wiki/Component_Object_Model


感谢你的回答。我已经担心这将是唯一的方法了,而且我没有使用COM的经验,也没有时间去学习它。但我有时间时会研究一下的! - Tiddo
@Tiddo,如果你考虑用C#编写主要应用程序,那么使用COM将会很轻松。 - Andrey Rubshtein
这个应用程序是我们已经用C++编写的应用程序的轻微修改。这个应用程序是为了计算机科学课程,我们的主要重点应该放在图像识别部分,所以我认为重写整个应用程序不值得我们花时间。然而,我会记住这一点,为我的下一个项目做准备! - Tiddo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接