클래스의 인스턴스가 있고 mexCallMATLAB
함수를 사용하여 함수에 전달하려고합니다."mwArray *"와 "mxArray *"간에 데이터를 전송하는 방법은 무엇입니까?
클래스는 원래 Matlab에 있지만 데이터는 C++ 래퍼에 있으므로이 코드를 approach으로 사용하고 데이터를 패키지화했습니다. 그러므로 최종 오브젝트의 타입은 mwArray
입니다. (Matlab에있는 GlobalData
클래스와 C++에있는 globals
인스턴스입니다.) 그러나 mexCallMATLAB
함수는 mxArray *
을 사용합니다.
mwArray *
에서 mwArray *
까지 데이터를 전송하는 방법은 무엇입니까? 유형이 단순하다면 수동 전송으로 쉽게 할 수 있습니다. 예를 들어 mxArray
의 이중 배열을 만들고 수동으로 데이터를 복사합니다. 그러나이 상황에서 데이터는 여러 데이터 필드/유형의 클래스입니다.
더 일반적으로 C++ 래퍼의 클래스를 Matlab 함수에 전달하는 방법은 무엇입니까?
는이 matlab에
classdef GlobalData < handle
properties
val1
val2
val3
end
end
이 내가 mcc
를 통해 컴파일 및 포장 클래스에 사용되는 매트랩 함수의 클래스입니다 가정하자.
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에 복사 할 수 있는지 의미합니다. –