Un enfoque común es tener varias funciones m-file que proporcionan la interfaz pública, p. sysInit.m, sysRefresh.m, etc.
Cada uno de estos archivos m llama a la función mex con algún tipo de manejador, una cadena (o número) que identifica la función a llamar y cualquier argumento adicional. Por ejemplo, sysRefresh.m podría ser:
function sysRefresh(handle)
return sysMex(handle, 'refresh')
En su función de Sysmex mex, puede ser el mango tiene un puntero montón prima (fácil, pero no es muy seguro), o se puede mantener una asignación en C/C++ desde el identificador del identificador a los punteros del objeto real. Esta solución requiere un poco de trabajo extra, pero es mucho más segura. De esta forma, alguien no puede pasar accidentalmente un número arbitrario como manejador, que actúa como un puntero colgante. Además, puede hacer cosas más sofisticadas como usar una función onCleanup para liberar toda la memoria y los recursos cuando descargue la función mex (por ejemplo, para que no tenga que reiniciar matlab cuando recompila la función mex).
Puede ir un poco más lejos si le gusta y esconde el mango detrás de una clase Matlab. Lea sobre las características de OO para Matlab en los documentos si le interesa. Si está utilizando una versión reciente, puede aprovechar sus objetos de manejo mucho más limpios.
Gracias Sr. Fooz. Lo he implementado con handle (directamente como el puntero) y parece estar funcionando. Esto es un poco sorprendente para mí que el objeto de clase asignado en el montón, no se borre cuando la función mex regrese. ¿Es este un comportamiento normal en el que puedo confiar en Windows (XP, Vista y 7)? Muchas gracias de nuevo. – Paul
Si asigna objetos utilizando el asignador de Matlab, estos se eliminan automáticamente al regresar de la función mex. Si usa malloc o new, entonces Matlab no los conoce y, por lo tanto, no se desasigna. –