Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Matlab中使用calllib从C头文件中获取常量和枚举值_C_Matlab - Fatal编程技术网

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

在Matlab中使用calllib从C头文件中获取常量和枚举值,c,matlab,C,Matlab,所以我使用calllib调用我的共享库。一切都很顺利 我传递给loadlibrary的一个C头文件具有枚举值。有没有办法在matlab中引用这些枚举值?像 ret = calllib('mylib','foo',x); if (ret == libenum('mylib','returnSuccess'))... 正在查找相同的内容,但在文档中未发现此类内容。但是,由于可以在matlab中使用相应的C enum字符串,这实际上比libenum('mylib','returnSuccess')更

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

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

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

正在查找相同的内容,但在文档中未发现此类内容。但是,由于可以在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