mexGetArrayPtr没有按预期工作

时间:2011-02-02 13:57:15

标签: matlab mex

我有以下test_mex mex函数:

void mexFunction(int nlhs, mxArray **plhs, int nrhs, const mxArray **prhs)
{
  const mxArray* m_var = NULL;
  if ((m_var = mexGetArrayPtr("a", "caller")) == NULL)
  {
    mexErrMsgTxt("oopsie");
  }
}

以下test.m文件:

function test()
  a = 12345;
  test_mex();
  • 当我跑它时总是失败并打印“oopsie”。
  • 当我将a设为全局并将mex函数中的“调用者”字符串更改为“global”时,它可以正常工作。

我做错了什么?

注意:

  • 这是一个非常古老的matlab版本:Version 6.1.0.450 Release 12.1
  • mexGetArrayPtr是mexGetVariablePtr的旧版本,是的,其参数顺序不同

1 个答案:

答案 0 :(得分:1)

我在Solaris上的6.1.0.450版本下尝试了这个示例。我必须改变的一件事是

test_mex();

是旧版MATLAB中的语法错误,我需要将其更改为

test_mex;

这很有效(没有产生错误)。你提到你在评论中“用mcc编译脚本”。您的意思是说您正在使用MCC编译test.m功能吗?如果我没记错的话,在R12.1中,MCC编译的M代码变成了C代码(用于MEX或独立可执行文件),因此没有“mexGetArrayPtr”访问的“工作区”。基本上这是MCC编译器的限制。我试过了

mcc -x test.m

(构建MCC生成的MEX文件)包含您描述的“调用者”案例和“全局”案例,并在使用“调用者”时看到“oopsie”错误,使用“global”时没有错误,正如你所描述的那样。