我尝试将函数mexCallMATLAB
用作described here。
但是,我总共有4个输入参数,所以我通过
创建了mxArray
mxArray *funcInputs[4];
我想用向量分配前三个指针(我已成功完成)。但是,对于最后一个指针,我想为它分配一个整数,但无济于事。
这是我到目前为止所做的:
funcInputs[3] = mxCreateDoubleMatrix(1,1,mxREAL);
int total = 33;
std::memcpy(funcInputs[3], &total, 1);
mex函数成功编译但未传递值33
。
我试图执行这样的功能:
mxArray *outs[2];
mexCallMATLAB(2, outs, 4, funcInputs, "myFunction");
mexCallMATLAB
会按预期调用函数myFunction
,但值33
不会传递给函数。
我是怎么搞砸的?
答案 0 :(得分:1)
你在这段代码中做了什么:
describe
创建一个fdescribe
对象并将其指针指向指针数组的第4个元素,然后用funcInputs[3] = mxCreateDoubleMatrix(1,1,mxREAL);
int total = 33;
std::memcpy(funcInputs[3], &total, 1);
的第一个字节覆盖mxArray
对象的第一个字节
mxArray
是一个对象,它包含有关其大小和类型的信息,以及指向实际数组数据的指针。您可以使用http://www.w3.org/2001/10/xml-exc-c14n#:
int
然后您可以将您的值分配到指向的位置:
mxArray
double* ptr = mxGetPr(funcInputs[3]);
总是返回一个双精度数。如果您的矩阵属于不同类型,则需要使用其他访问者。请参阅http://www.w3.org/2001/04/xmlenc#sha256。
请注意,上面的所有代码都可以替换为单个函数调用:
*ptr = 33;