如何在Matlab mex文件中访问类值?

时间:2014-04-14 07:54:16

标签: c matlab class mex

这是我在Matlab中使用.m文件的简单虚拟类。

function obj = dummy(varargin)
  if nargin~=1
    error('nothing to do here')
    return
  end

  obj = init_fields;
  obj = class(obj, 'dummy');
  obj.file = varargin{1};

end

function obj = init_fields()
  obj.file = [];
end

>> a = dummy('file.name');

我现在可以在其他.m函数文件中访问a.file。例如something = newfunction(a)

但是如何在C编写的MEX函数中访问obj.file的值(我可以fopen(" file.name"))?

mxArray *pa;
mexPrintf("%s\n", mxGetFieldNameByNumber(prhs[0], 0));
pa = mxGetFieldByNumber(prhs[0], 0, 0);
mexPrintf("%s\n", pa); /* this don't work */
mexCallMATLAB(0, NULL, 1, &pa, "disp"); /* this works * /

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

自R2014a起,Matlab矩阵库中有两个API函数:mxGetPropertymxSetProperty。 (参见this)只要您的对象是具有公共属性的简单值类,它们就可以工作。否则,您必须使用mexCallMATLAB来访问数据。

答案 1 :(得分:0)

我找不到任何方法来访问MEX文件中的类值。 我的解决方法是使用.m函数作为包装器

function out=dumdum(obj,cmd) 
    out=mexfnc(obj.file, cmd); 
end