Я пытался создать общую библиотеку C с использованием компилятора Matlab, которая некоторое время будет использоваться в качестве подключаемой библиотеки для другого приложения. Недавно я думал, что выполнил эту задачу только для того, чтобы понять, что функция, которую я вызывал из моей новой общей библиотеки "Matlab Compiled", должна была преобразовать свой возврат в структуру C.
Я использовал пример, найденный на сайте Matlab Answers, чтобы помочь мне создать функцию-оболочку level2 для вызова моей функции Matlab, которая должна возвращать структуру. (http://www.mathworks.com/matlabcentral/answers/94715-how-do-i-wrap-matlab-compiler-4-8-r2008a-created-c-dlls-to-create-another-dll)
Моя проблема заключается в части Преобразовать возвращенные данные MATLAB в данные C кода, приведенного ниже. Я могу преобразовать в целые числа, двойные числа, символы и т. д. в порядке, но мне трудно понять, как закодировать преобразование из mxArray, возвращаемого Matlab, в структуру C.
/* Wrapper for level 1 function exported by the MATLAB generated DLL *
* This function converts C data to MATLAB data, calls the MATLAB generated *
* function in level1.dll and then converts the MATLAB data back into C data */
int wmlfLevel1(double* input2D, int size, char* message, double** output2d){
int nargout=1;
/* Pointers to MATLAB data */
mxArray *msg;
mxArray *in2d;
mxArray *out2d=NULL;
/* Start MCR, load library if not done already */
int returnval=isMCRrunning();
if(!returnval)
return returnval;
/* Convert C data to MATLAB data */
/* IMPORTANT: this has to be done after ensuring that the MCR is running */
msg=mxCreateString(message);
in2d=mxCreateDoubleMatrix(size, size, mxREAL);
memcpy(mxGetPr(in2d), input2D, size*size*sizeof(double));
/* Call the M function */
returnval=mlfLevel1(nargout, &out2d, in2d, msg);
/*Convert returned MATLAB data to C data */
*output2d=(double *)malloc(sizeof(double)*size*size);
memcpy(*output2d, mxGetPr(out2d), size*size*sizeof(double));
/* Clean up MATLAB variables */
mxDestroyArray(msg);
mxDestroyArray(in2d);
mxDestroyArray(out2d);
return returnval;
}
До сих пор я пытался использовать функцию mxCreateStructMatrix, я пытался создать скелет структуры C, я собираюсь попробовать функцию libstruct, но, поскольку я новичок в программировании на C и компиляторе Matlab, любая помощь будет очень признательна!