MATLAB: Calling matlab from c++

c

Hi
I am trying to print values obtained from matlab function which is called in c++ program. This is the code, I am not sure how can I print values.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "engine.h"
int main()
{
Engine *ep;
if (!(ep = engOpen(""))) {
fprintf(stderr, "\nCan't start MATLAB engine\n");
return EXIT_FAILURE;
}
int const SIZE=1;
int const SIZE2=1;
double x[SIZE][SIZE2];
x[1][1] = 1.0;
mxArray *A=NULL;
A=mxCreateDoubleMatrix(SIZE2, SIZE, mxREAL);
memcpy((void *)mxGetPr(A), (void *)x, sizeof(double)*SIZE*SIZE2);
engPutVariable(ep, "Data", A);
engEvalString(ep, "newData = test_matlab(Data)");
double *cresult;
mxArray *mresult;
mresult = engGetVariable(ep,"newData");
cresult = mxGetPr(mresult);
mxDestroyArray(A);
mxDestroyArray(mresult);
engClose(ep);
return EXIT_SUCCESS;
}

Best Answer

Use regular output functions. E.g., ( after you assign the value of cresult but before you destroy the mxArray mresult ):
printf( "The result is %g\n", *cresult );
But note that you will need to pause your program at the end in order to see this output on the screen (otherwise the window will close immediately after printing and you will not see it).
SIDE NOTE:
All of this code:
int const SIZE=1;
int const SIZE2=1;
double x[SIZE][SIZE2];
x[1][1] = 1.0;
mxArray *A=NULL;
A=mxCreateDoubleMatrix(SIZE2, SIZE, mxREAL);
memcpy((void *)mxGetPr(A), (void *)x, sizeof(double)*SIZE*SIZE2);
can be simplified to this:
mxArray *A=NULL;
A = mxCreateDoubleScalar(1.0);
Also, you should be getting in the habit of checking your pointers before using them. E.g., A, mresult, and cresult should all be checked to see that they are not NULL before you try to dereference them.