所以我使用calllib来调用我的共享库。一切都很顺利。
我传递给loadlibrary的一个C头文件具有枚举值。有没有办法在matlab中引用这些枚举值?像
ret = calllib('mylib','foo',x);
if (ret == libenum('mylib','returnSuccess'))...
答案 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