Const char into mex files

5 vues (au cours des 30 derniers jours)
Jorge Mario Guerra González
Commenté : James Tursa le 14 Sep 2016
Hello,
I'd like to know how can I export my Matlab strings to use them whitin a MEX file, as it follows. I'm quite new using MEX files and I'd really appreciate any help
I have in matlab this variable
folder = 'C:\Users\Jorgue Guerra\Desktop\Sample_1'
then I want to export that value to use in C, I've tried something like this.
void mexFunction(int nlhs, mxArray *plhs[], //output
int nrhs, const mxArray *prhs[]){ //input
const char *folder= (const char)mxGetData(prhs[0])
//.....other code using folder var
}
I know it can't be as simple as that, but I have no clue where to begin
  2 commentaires
Walter Roberson
Walter Roberson le 13 Sep 2016
At the very least it would have to be
const char *folder= (const char *)mxGetData(prhs[0]);
because mxGetData returns a pointer, not a character.
James Tursa
James Tursa le 14 Sep 2016
Modifié(e) : James Tursa le 14 Sep 2016
Even this won't work, because MATLAB char data is 2-bytes per character, whereas C char data is 1-byte per character. So you need something like the mxArrayToString API function to do an actual allocation + copy. Or one could use this to access the MATLAB char data manually:
const unsigned short *folder= (const unsigned short *)mxGetData(prhs[0]);

Connectez-vous pour commenter.

Réponse acceptée

Jorge Mario Guerra González
I solved it by myself.
If anyone is in trouble with this the answer is given in this page
  1 commentaire
James Tursa
James Tursa le 14 Sep 2016
FYI, that link is a bit misleading. The memory for output_buf does not become part of the plhs[0] output as a result of the mxCreateString call, so it should in fact be released just like the memory for input_buf is released. I.e., this line should appear at the end of the code:
mxFree(output_buf);

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Write C Functions Callable from MATLAB (MEX Files) dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by