在Matlab中从C头文件获取常量和枚举值w / calllib

时间:2014-05-07 14:16:55

标签: c matlab

所以我使用calllib来调用我的共享库。一切都很顺利。

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

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

1 个答案:

答案 0 :(得分: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结构,你可以像

一样使用它们
enums.tagResult.Failed