Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 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功能。如果您使用的是最新版本,则可以利用它们更简洁的句柄对象。



更多&回答...
poster 当前离线   回复时引用此帖
 

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 03:19


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.