![]() |
MATLAB MEX与具有多种功能的类对象的接口
我正在使用MEX界面在MATLAB中运行C ++代码。我想向MATLAB添加一些函数来处理System对象:
sysInit() sysRefresh() sysSetAttribute(name, value) String = sysGetAttribute(value) sysExit() 由于每个MEX dll都可以包含一个函数,因此我需要找到一种存储指向全局System对象的指针的方法,该对象将一直存在,直到被sysExit调用删除sysExit 。 如何在MATLAB中正确执行此操作?有什么方法可以在对MEX函数的调用中存储全局指针? 回答: 一种常见的方法是拥有提供公共接口的多个m文件功能,例如sysInit.m,sysRefresh.m等。 这些m文件中的每一个都使用某种类型的句柄,标识要调用的函数的字符串(或数字)以及任何其他arg调用mex函数。例如,sysRefresh.m可能类似于: function sysRefresh(handle) return sysMex(handle, 'refresh') 在sysMex mex函数中,您可以将句柄作为原始堆指针(简单但不太安全),也可以在C / C ++中维护从句柄ID到实际对象指针的映射。此解决方案需要一些额外的工作,但是要安全得多。这样,某人就不会意外地将任意数字作为句柄传递,该句柄充当了悬空的指针。同样,您可以做一些更奇特的事情,例如在卸载mex函数时使用onCleanup函数释放所有内存和资源(例如,这样,当您重新编译mex函数时,不必重新启动matlab)。 如果愿意,可以走得更远,并将手柄隐藏在Matlab类的后面。如果您有兴趣,请在文档中阅读Matlab的OO功能。如果您使用的是最新版本,则可以利用它们更简洁的句柄对象。 [url=https://stackoverflow.com/questions/1182183]更多&回答...[/url] |
所有时间均为北京时间。现在的时间是 23:37。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.