gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:14:57 24 4
gpt4 key购买 nike

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

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

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

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

例如

mxArray* createFoo();

或者

void createFoo(mxArray* myData);

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

编译器是Visual Studio 2010,Matlab是2011b。

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

最佳答案

好吧,如果没有最小的例子,我就不应该再问问题了。简单的问题是,我忘记返回*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
}

关于创建 mxArray 数据并将其从其他函数传递到 Mex 网关函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30127905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com