Ejecutar código C en Matlab: parte 3
Continuando un poquito con el tema, voy a hacer un pequeño aporte aunque no muy significativo. Voy a explicar un par de problemas que me he ido encontrando estos días.
Primero vamos a ver como obtener una cadena de texto pasada como parámetro de entrada. Lo inmediato es pensar en lo siguiente:
char *string;
string = (char *)mxGetPr(prhs[1]);
mexPrintf("%s\n", string);
Pero, ¿qué ocurre con esto? Como ya comenté, para Matlab es un mxArray y por eso sólo estamos accediendo al primer carácter. Así que debemos ingeniánolas un poco:
int length;
char *string;
length = mxGetN(prhs[1])+1;
string = mxCalloc(length, sizeof(char));
mxGetString(prhs[1], string, length);
mexPrintf("%s\n", string);
mxFree(string);
Y por último unos apuntes acerca de cómo añadir parámetros a la hora de compilar. Son especialmente útiles cuando enlazamos con librerías externas u opciones muy específicas que puedan ser necesarias:
mex fichero_mex.c CFLAGS='$CFLAGS -Wall' LDFLAGS='$LDFLAGS -w'
Y cuidado con la opción -o, porque si se indica el código máquina generado no será ejecutable desde Matlab :)
Tags
La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.
