我有一個類的實例,我想通過使用mexCallMATLAB
函數將它傳遞給一個函數。如何在「mwArray *」和「mxArray *」之間傳輸數據?
該類最初是在Matlab中,但由於數據是在我的C++包裝,我使用這approach並打包我的數據。因此,最終對象的類型是mwArray
(請參見提及的鏈接和GlobalData
類,它是在Matlab中的,而globals
是C++中的實例)。但是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");
// ...
}
請告訴你代碼。我不是心靈的。 –
這是一個錯字_「如何將mwArray *轉換爲mwArray *?」_? –
@RichardCritten我的意思是,如果mwArray的類型不是像int或double這樣的簡單數據類型的類,那麼如何將mwArray複製到mxArray。 –