C function returning an mxArray pointer

12 visualizaciones (últimos 30 días)
Joel Andersson
Joel Andersson el 1 de Sept. de 2011
Comentada: Marleen el 23 de Jul. de 2025
Hello!
I am trying to interface our software to Matlab using the functionality to call external, shared libraries from Matlab using loadlibrary and calllib.
My question is:
If I have a C function returning a mxArray pointer: mxArray* myCFunction(mxArray* args);
Will then Matlab be responsible for deleting the object? What If the function returns a null pointer or the input arguments, is this forbidden, e.g.: mxArray* myCFunction(mxArray* args){ return args; }
or
mxArray* myCFunction(mxArray* args){ return 0; }
Best, Joel

Respuesta aceptada

Philip Borghesani
Philip Borghesani el 1 de Sept. de 2011
The rules are the same as for outputs returned via plhs in a mex file.
In short:
  • To return an input a copy must be made with mxDuplicateArray.
  • MATLAB will delete the object when there are no longer any references to it in MATLAB.
  • A null pointer should convert to an empty double array but test this if you depend on it.
  2 comentarios
Joel Andersson
Joel Andersson el 2 de Sept. de 2011
Alright. Thank you for clarifying!
Marleen
Marleen el 23 de Jul. de 2025
Hello, this is outdated information as of matlab 2025a. My DLL functions return mxArray*. On error state it used to return NULL. On matlab side, a calllib call would just throw error as if no output argument is there. So it doesn't even convert to an empty double array. My fix was to change the error handling to use mexErrMsgIdAndTxt, which works wonderfully.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre C Shared Library Integration en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by