Hola,
Tengo las siguientes líneas en una DLL:
bool FuncionX();
bool ReservarMemoria(unsigned char **i_ppucBuffer,
long i_lSize);
bool FuncionX()
{
unsigned char *l_pucBuffer = NULL;
if (ReservarMemoria(l_pucBuffer, 10000000))
{
printf ("OK");
LlamarAFuncionDeTercero(l_pucBuffer);
free(l_pucBuffer);
return (true);
}
printf ("NO OK");
return (false);
}
bool ReservarMemoria(unsigned char **i_ppucBuffer,
long i_lSize)
{
*i_ppucBuffer = NULL;
i_ppucBuffer = (unsigned char *) malloc(i_lSize);
if (i_ppucBuffer == NULL)
return (false);
return (true);
}
La idea es que la segunda función debe hacer la reserva de memoria. No
utilizo new debido a problemas de "compatibilidad" con unas DLLs de
terceros. La pregunta concreta es: es esta la forma como debo declarar el
primer parámetro y su respectiva reserva de memoria?.
Haciendo seguimiento de la funcion "FuncionX()" de la DLL desde un programa
VC++ esta se ejecuta sin problemas, pero si llamo a "FuncionX()" desde una
aplicación Visual Basic se presenta un error en la línea
"free(l_pucBuffer)", pero este error sólo se presenta la primera vez que
llamo a "FuncionX()", si la llamo nuevamente de manera consecutiva, el error
no se vuelve a presentar. También he notado que una vez termine la
ejecución de la aplicación VB y vuelvo a lanzarla, entonces ya no se
presenta el error en el primer llamado a "FuncionX()". La aplicación VB se
lanza simpre desde el Visual Basic, no desde su propio ejecutable. Alguien
puede sugerirme alguna causa?
Willser F.
willser@latinmail.com
Leer las respuestas