如何在"mwArray *"和"mxArray *"之间传输数据?



我有一个类的实例,我想用mexCallMATLAB函数将它传递给一个函数。

该类最初在Matlab中,但由于数据在我的C++包装器中,我使用了这种方法并将数据打包到它中。因此,最终对象的类型是mwArray(参见前面提到的链接和Matlab中的GlobalData类,以及C++中的globals实例)。但mexCallMATLAB函数使用mxArray *

如何将mwArray *的数据传输到mwArray *?如果类型简单,则可以通过手动转移轻松完成。例如,创建mxArray的双数组并手动将数据复制到其中。但在这种情况下,数据是多个数据字段/类型的类。

更一般地说,如何从C++包装器将类传递给Matlab函数?

假设这是Matlab 中的类

classdef GlobalData < handle
properties
val1
val2
val3
end
end

这是我通过mcc编译的Matlab函数,用于包装类。

function globals = create_globals()
globals = GlobalData();
globals.val1 = 2;
globals.val2 = 5.25;
globals.val3 = 'data name';
end

这是具有数据的C++代码。在这里,我们使用前面的方法创建GlobalData的实例,并将其传递给Matlab函数myCallback

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
// ...
mwArray globals;
try {
// Pack data to a single Container class of type GlobalData
create_globals(1, globals);
} catch (const mwException& e) {
cerr << e.what() << endl;
return;
} catch (...) {
cerr << "Unexpected error thrown" << endl;
return;
}
int nlhs1 = 1, nrhs1 = 2;
mxArray *plhs1[1], *prhs1[2];
// First parameter of myCallback set to a arbitrary double value
prhs1[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
*mxGetPr(prhs1[0]) = .6;
// Here prhs1[1] must set to globals
// ??? prhs1[1] = globals ???
mexCallMATLAB(nlhs1, plhs1, nrhs1, prhs1, "myCallback");
// ...
}

您可以使用GetData()方法提取mxArray *

mwArray *A;
mxArray *B;
B = A->GetData();

相关内容

  • 没有找到相关文章

最新更新