我有以下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();
a
设为全局并将mex函数中的“调用者”字符串更改为“global”时,它可以正常工作。我做错了什么?
注意:
答案 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”时没有错误,正如你所描述的那样。