1

我有一个更新系统的 c++ 程序。当我用 C++ 编写所有东西时,它看起来有点像这样

System S; //initialize a System object 'S'
while (notFinished)
{
    S.update1(inputVars1);
    S.update2(inputVars2);
}

现在我想从 matlab 中调用各个更新函数,并能够在 matlab 中调试时随时使用访问函数(用 c++ 编写)来查看程序的状态。

所以matlab需要调用一些东西来实例化一个“系统”对象,然后它需要从原始系统对象调用各个系统方法。

假设我将单独的 mex 文件编译为Initialize update1 update2和一些获取有关当前状态的信息getState。然后写一些matlab代码...

%matlab main
S = Initalize(); %mex file
while (notFinished)
    update1(S); %mex file
    keyboard; % access state information using "getState" mex function
    update2(S); %mex file
    keyboard; % access state information using "getState" mex function
end

这基本上允许我在 Matlab 中调用和调试我的 C++ 程序算法,还是有另一种方法来解决整个问题?

4

1 回答 1

1

我这样做的方法是使用“new”在 Initialize mex 函数中为 C++ 中的 System 创建一个指针。如果您在 64 位平台上,则将此指针转换为 64 位整数并创建具有该类型和值的 mxArray。从您的 Initialize 函数中返回此 mxArray。

对于以后调用您的其他 mex 文件,您应该将此 mxArray 作为输入传递。在这些文件中,您可以将其转换为指针并调用对象上的方法。

我还将采取进一步措施将整个事物包装在 MATLAB System 对象或常规对象中,而不是将指针值 S 暴露在对象之外。您需要对象上的方法来调用您的 mex 文件。如果您打算将其提供给其他人使用,则尤其需要这样做。其他人可能会意外覆盖或修改 S 导致崩溃。

最后,您需要一个删除指针 S​​ 的删除 mex 函数。如果您创建一个句柄类,那么您可以在析构函数中执行此操作。

于 2013-02-06T03:59:29.340 回答