要构建一个接口作为Matlab-Mex,它接收几个由复杂的C结构组成的不同消息,我想在不同的函数中创建相应的Mex-Structs。
是否可以将包含用户定义函数字段的mxArrays
传递给mexFunction()
?
我创建了应该在mexFunctions()
内部调用的函数,这些函数应该将填充的mxArray
数据类型作为指针传递给mexFunction()
但不起作用。
E.g。
mxArray* createFoo();
或者
void createFoo(mxArray* myData);
在mexFunction()
内部,这些createFoo()
函数无法将创建的数据指针传递回函数。在他们内部,创建数据确实有效,但他们返回的指针因为例如myData = mxCreateDoubleMatrix()
。
编译器是Visual Studio 2010,Matlab是2011b。
可以直接写入函数内部的工作区,但这是非常糟糕的风格。
答案 0 :(得分:0)
好的,我不应该再提一个没有最小例子的问题。简单的问题是,我忘了return
*mxArray
...
传递mxArray
工作的两种可能性:
A)返回mxArray *
mxArray* createFoo()
{
mxArray* myArray;
myArray = mxCreateDoubleMatrix(1,1,mxREAL);
*mxGetPr(myArray) = 3;
mexPrintf("*mxGetPr(myArray)= %f\n", *mxGetPr(myArray)); // 3
return myArray;
}
B)参考mxArray **
void createFooReference(mxArray** myArray)
{
*myArray = mxCreateDoubleMatrix(1,1,mxREAL);
*mxGetPr(*myArray) = 4;
mexPrintf("Pointer: *mxGetPr(*myArray)= %f\n", *mxGetPr(*myArray)); // 4
}
现在可以调用函数并将值返回给Matlab:
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray prhs[])
{
mxArray *mexA, *mexB;
mexA = createFoo();
plhs[0] = mexA; // 3
createFooReference(&mexB)
plhs[1] = mexB; // 4
}