2014-05-07 31 views
2

所以我使用calllib来调用我的共享库。一切都很好。从Matlab的头文件w/calllib获取常量和枚举值

我传递给loadlibrary的C头文件之一有枚举值。有没有办法在matlab中引用这些枚举值?像

ret = calllib('mylib','foo',x); 
if (ret == libenum('mylib','returnSuccess'))... 

回答

0

正在寻找相同的东西,在文档中找不到这样的东西。但是因为你可以在matlab中使用相应的C enum字符串,它实际上比libenum('mylib','returnSuccess')简单。你可以做

if(ret == 'returnSuccess') 

但是很显然,MATLAB本身知道枚举因为使用libfunctionsview的名字显示它们。如果你看loadlibrary,你会看到matlab基本上预处理头文件并在其上运行一个perl脚本,它创建一个包含所需信息的m文件。包括枚举。例如我有失败和成功项为C枚举,这里是由perl脚本创建的相应的m码:

enuminfo.tagResult=struct('Failed',0,'Success',1); 

该脚本在loadlibrary评估,并创建包含所有枚举一个结构enums。所以,如果你提取需要到达的部分,你可以获得所有你需要的信息。尽管如此,我仍将实际工作留给你,但只是修改loadlibrary函数定义实际上就足够了,不管它对维护友好程度如何。如果你改变了定义

function [notfound,warnings,enums]=loadlibrary(library,header,varargin) 

它会高兴地返回枚举结构,您可以使用它们像

enums.tagResult.Failed