MATLAB: Data extraction from MATLAB to mex-function setup

embedded matlabmexmexcallmatlabsort

Hi all,
I am trying to extract data calculated in the MATLAB environment into the mex-function set-up in vain. Could someone please point out the error in my code or anything that I am doing wrong?
int *aidx, *idx;
const mxArray *m_sort[2], *m_pctemp[3];
../* Necessary initializations for 'sort' is made and all is well so far */..
mexCallMATLAB(2, m_sort, 3, &m_pctemp, "sort"); // Works fine
/* Displays the correct data in 'm_sort' */
mexCallMATLAB(0, NULL, 1, &m_sort[0], "disp"); //(double)
mexCallMATLAB(0, NULL, 1, &m_sort[1], "disp"); //(int)
aidx = (int *)mxGetData(m_sort[1]);
OR
aidx = mxGetPr(m_sort[1]);
idx = ivector(0, 23); // memory allocation with indices range(0-23)
for (i = 1; i <= 24; i++) // Matlab indices is from 1 to 24
idx[i-1] = aidx[i]; // Wrong values from aidx[] here
I will need the array m_sort[1] that holds the indices for further processing. It looks like I am not extracting the values properly. Both the APIs fail to give me the correct values.
I believe using mxGetData with proper casting (int *) is the right way to get the integer data from m_sort[1].
Am I right? If not, Please tell me what is the right way to do it? or if I should provide more information to get me off this problem.
Thanks in advance.

Best Answer

  • The sorting index is a DOUBLE vector in Matlab. Therefore you need:
    int *idx;
    double *aidx;
    aidx = mxGetPr(m_sort[1]);
    ...
    idx[i-1] = (int) aidx[i];