MATLAB MEX接口,具有多个函数的类对象

Pau*_*aul 7 c++ oop matlab mex

我正在使用MEX接口在MATLAB中运行C++代码.我想在MATLAB中添加几个函数来处理System对象:

sysInit()
sysRefresh()
sysSetAttribute(name, value)
String = sysGetAttribute(value)
sysExit()
Run Code Online (Sandbox Code Playgroud)

由于每个MEX dll可以包含一个函数,我需要找到一种方法来存储指向全局System对象的指针,该对象将一直存在,直到被调用删除sysExit.

我怎样才能在MATLAB中正确执行此操作?有没有办法在调用MEX函数时存储全局指针?

Mr *_*ooz 8

一种常见的方法是提供几个提供公共接口的m文件函数,例如sysInit.m,sysRefresh.m等.

这些m文件中的每一个都使用某种句柄调用mex函数,标识要调用的函数的字符串(或数字)以及任何额外的args.例如,sysRefresh.m可能如下所示:

function sysRefresh(handle)
return sysMex(handle, 'refresh')
Run Code Online (Sandbox Code Playgroud)

在sysMex mex函数中,您可以将句柄作为原始堆指针(简单但不是非常安全),或者可以在C/C++中维护从句柄ID到实际对象指针的映射.这个解决方案需要一些额外的工作,但它更安全.这样,有人不会意外地将任意数字作为句柄传递,该句柄充当悬空指针.此外,当您卸载mex函数时,您可以使用onCleanup函数来释放所有内存和资源(例如,因此在重新编译mex函数时不必重新启动matlab).

如果你喜欢并隐藏Matlab类后面的句柄,你可以更进一步.如果您有兴趣,请阅读文档中Matlab的OO功能.如果您使用的是最新版本,则可以利用更清晰的处理对象.