我有一个更新系统的c ++程序。当我用C ++编写所有内容时,它看起来有点像这样
System S; //initialize a System object 'S'
while (notFinished)
{
S.update1(inputVars1);
S.update2(inputVars2);
}
现在我想从matlab调用各个更新函数,并且能够在matlab中调试时随时使用访问函数(用c ++编写)来查看程序的状态。
所以matlab需要调用一些东西来实例化一个“System”对象,然后它需要从原始系统对象中调用各个System方法。
假设我将单独的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 ++程序算法,还是有另一种方法可以解决这个问题?
答案 0 :(得分:1)
我这样做的方法是使用“new”在Initialize mex函数中为C ++中的System创建一个指针。如果您使用的是64位平台,则将此指针强制转换为64位整数,并创建具有该类型和值的mxArray。从Initialize函数返回此mxArray。
对于以后调用其他mex文件,您应该将此mxArray作为输入传递。在这些文件中,您可以将其作为指针强制转换,并在对象上调用方法。
我还需要再做一步,将整个内容包装在MATLAB System对象或常规对象中,而不是将指针值S暴露在对象之外。你需要在对象上调用你的mex文件的方法。如果您计划将此内容提供给其他人使用,则尤其需要这样做。其他人可能会意外覆盖或修改导致崩溃的S.
最后你需要一个删除mex函数来删除指针S.如果你创建一个句柄类,那么你可以在析构函数中执行此操作。