Problema con DLL, hecha en Visual C++

11/11/2003 - 22:14 por Jorwin | Informe spam
Hola,
Primero que nada quiere que me disculpen por tantas
preguntas en tampoco tiempo lo que pasa es que soy nuevo
en este lenguaje, bueno al grano, tengo una dll
desarrollada en visual c++, dicha dll, cuando la ejecuto
desde visual fox pro o desde visual basic, me genera un
error de memoria, al momento de yo ejecutar dicha dll, no
me genera ningun error, el problema esta cuando esta dll
la ejecuto en varios procedimientos o muy seguido me
arroja un error que dice que no puede escribir en la
memoria, y se sale de la aplicacion, ahora bien alguein me
podria explicar porque ocurre esto, porque la verdad no
entiendo nada.
Sera que al momento de crear la dll me falta alguna opcion
la verdad no se.
bueno aqui les dejo algo de mi dll
char* prueba(CString valor)
{
CString x;
//realizo una serie de operaciones to//
return _strdup((char*)(LPCTSTR)x);
};
la mayoria de mis funciones estan de esa forma me
devuelven un valor char*

Bueno Espero me puedan ayudar y disculpen tanta molestia
de mi parte.

Jorwin Cumare.
 

Leer las respuestas

#1 Javier Ariza Ayuso
12/11/2003 - 08:56 | Informe spam
Hola:

Tal y como has posteado el trozo de código es normal que te de problemas de
memoria

Estás devolviendo un string declarado dentro de la función; al salir de la
función prueba() el valor de x desaparecerá de la memoria, con lo que la
aplicación que recibe el valor devuelto char* no verá nada ahí o, a lo sumo,
lo verá corrupto.

Si lo que pretendes hacer en la función prueba es obtener un char* a partir
de un CString, tienes dos opciones: una de ellas es devolver char*
reservando dentro memoria para éste con malloc(), con lo que deberás hacer
otra función delntro de la misma dll opuesta a prueba dentro del cual hagas
free(); La otra opción es pasar la variable char* a prueba por referencia,
habiendo reservado ya memoria previamente. Esta es la opción que te
recomiendo:

DLL:

void prueba(char* pcad, CString valor) {
CString x;

// .. //

strcpy(pcad, x); // CString hace un casting automáticamente a char* y
copia la cadena a pcad

return;
}

en la APLI:

main() {
CString valor_cad;
char cadena[NNN]; // o bien char*
cadena=(char*)malloc(sizeof(char)*NNN);
..
prueba(cadena,valor_cad);
..
//Si se hizo malloc a cadena, hacer free(cadena);
..
}


Saludos.

"Jorwin" escribió en el mensaje
news:10dc01c3a898$dce02bc0$
Hola,
Primero que nada quiere que me disculpen por tantas
preguntas en tampoco tiempo lo que pasa es que soy nuevo
en este lenguaje, bueno al grano, tengo una dll
desarrollada en visual c++, dicha dll, cuando la ejecuto
desde visual fox pro o desde visual basic, me genera un
error de memoria, al momento de yo ejecutar dicha dll, no
me genera ningun error, el problema esta cuando esta dll
la ejecuto en varios procedimientos o muy seguido me
arroja un error que dice que no puede escribir en la
memoria, y se sale de la aplicacion, ahora bien alguein me
podria explicar porque ocurre esto, porque la verdad no
entiendo nada.
Sera que al momento de crear la dll me falta alguna opcion
la verdad no se.
bueno aqui les dejo algo de mi dll
char* prueba(CString valor)
{
CString x;
//realizo una serie de operaciones to//
return _strdup((char*)(LPCTSTR)x);
};
la mayoria de mis funciones estan de esa forma me
devuelven un valor char*

Bueno Espero me puedan ayudar y disculpen tanta molestia
de mi parte.

Jorwin Cumare.

Preguntas similares