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

Creating and Passing of mxArray Data from other functions to Mex gateway function

好吧伙计们,我感觉好像掉进了兔子洞...

要构建一个接口作为 Matlab-Mex 来接收由复杂的 C 结构组成的多个不同消息,我想在不同的函数中创建相应的 Mex-Structs。

是否可以通过某种方式将包含用户定义函数字段的 mxArrays 传递给 mexFunction()

我创建了应该在 mexFunctions() 内部调用的函数,这些函数应该将填充的 mxArray 数据类型作为指针传递给 mexFunction(),但这没有用。

例如

mxArray* createFoo();

void createFoo(mxArray* myData);

mexFunction() 内部,这些 createFoo() 函数无法将创建的数据指针传递回函数。在它们内部,数据的创建确实有效,但是它们返回的指针神秘地发生了变化,例如。 myData = mxCreateDoubleMatrix().

编译器是Visual Studio2010,Matlab是2011b。

在函数内部直接写入工作空间是可以的,但那是非常糟糕的风格。

好吧,我再也不会问一个没有最小例子的问题了。简单的问题是,我忘记了 return *mxArray...

通过 mxArray 的两种可能性都可以正常工作:

A) Return 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
}

现在可以将函数和 return 值调用到 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
}