创建mxArray数据并将其从其他函数传递到Mex网关功能

时间:2015-05-08 15:48:37

标签: c matlab mex

好吧,伙计们,我觉得我好像落入兔子洞......

要构建一个接口作为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。

可以直接写入函数内部的工作区,但这是非常糟糕的风格。

1 个答案:

答案 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
}