Foros del Web » Programación para mayores de 30 ;) » Programación General »

Error con una libreria

Estas en el tema de Error con una libreria en el foro de Programación General en Foros del Web. Hola, me pasa una cosa curiosa. He terminado un programa que llevo varios meses haciendo con Visual C++ 6.0. Pensaba que funcionaba perfectamente porque lo ...
  #1 (permalink)  
Antiguo 18/05/2005, 13:32
Avatar de Nietzsche  
Fecha de Ingreso: enero-2005
Ubicación: MALAGA-ESPAÑA
Mensajes: 228
Antigüedad: 19 años, 3 meses
Puntos: 0
Error con una libreria

Hola, me pasa una cosa curiosa. He terminado un programa que llevo varios meses haciendo con Visual C++ 6.0. Pensaba que funcionaba perfectamente porque lo ejecutaba con la pestaña que hay en el propio entorno gráfico del compilador: Build -> Execute BioLib3.exe.
Pero cual ha sido mi sorpresa cuando al probar la ejecucion haciendo doble clic directamente en el ejecutable el resultado ha sido diferente. El programa funciona bien hasta que hace una llamada a determinada función, entonces termina y muestra el siguiente mensaje:

"Unhandled exception in BioLib3.exe (NBIOBSP.DLL) : 0xc00000005 : Access violation"

Y ya digo que si lo ejecuto con las instruccion del menu del compilador funciona a la perfeccion.

A que se puede deber esto?
Muchas gracias.
  #2 (permalink)  
Antiguo 18/05/2005, 13:37
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
NBIOBSP.DLL esta accediendo a una direccion de memoria invalida, vas a tener que depurar esa libreria.

¿Es tuya?

PD. Los depuradores como el Visual Studio suelen inicializar la memoria a 0xCCCCCCCC, tal vez esa direccion este dentrod el rango de direcciones correcto cuando depuras mientras que cuando lo ejecutas se inicializa a vaya uno a saber que y da el error.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 18/05/2005, 14:06
Avatar de Nietzsche  
Fecha de Ingreso: enero-2005
Ubicación: MALAGA-ESPAÑA
Mensajes: 228
Antigüedad: 19 años, 3 meses
Puntos: 0
Pues no, no es mia la libreria. Es una libreria que viene ya incluida con el SDK que estoy trabajando y se supone que debe funcionar correctamente.
  #4 (permalink)  
Antiguo 18/05/2005, 14:15
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Seguramente sera un puntero erroneo que le estas pasando entonces, comproba todas las llamadas que hagas a la libreria.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 19/05/2005, 06:38
Avatar de Nietzsche  
Fecha de Ingreso: enero-2005
Ubicación: MALAGA-ESPAÑA
Mensajes: 228
Antigüedad: 19 años, 3 meses
Puntos: 0
Sigo sin resolver el problema aunque ya voy acotando donde esta el error.
El programa falla al hacer la siguiente llamada a una función de la libreria NBIOBSP.DLL :

ret = NBioAPI_Verify(m_hNBioBSP, // Handle de NBioBSP
&inputFIR, // Huella almacenada anteriormente
&resultado, // Resultado de la verificacion
NULL, // Uso de payload en la FIR
5000, // Tiempo para el escaneado de la imagen
NULL, // audit data
NULL); // Opcion ventana


Esta funcion escanea la imagen de una huella digital y la compara con otra almacenada anteriormente.

Sospecho que es el parametro "inputFIR" lo que provoca el fallo. Antes de llamar a la funcion verify cargo en inputFIR los datos de la huella que tenia almacenados en un fichero:

NBioAPI_FIR_TEXTENCODE g_firText; /* Huella en modo cadena de texto */
FILE* fp;
fp = fopen(szFilename, "rb");
if (fp)
{
DWORD dwLen = NULL;
fread(&dwLen, 1, sizeof(DWORD), fp);
g_firText.TextFIR = new NBioAPI_CHAR [dwLen];
fread(g_firText.TextFIR, 1, dwLen, fp);
fclose(fp);
}

inputFIR.Form = NBioAPI_FIR_FORM_TEXTENCODE; // Modo codificado en texto
inputFIR.InputFIR.FIR = &g_firText;


Al pasarle el debugger me dice lo siguiente:

Dumping objects ->
C:\BioLib3\verificacion.cpp(124) : {154} normal block at 0x00CD3560, 487 bytes long
Data: <AQAAABQAAABUAQAA> 41 51 41 41 41 42 51 41 41 42 55 41 51 41 41
Object dump complete


La linea 124 de verificacion.cpp es g_firText.TextFIR = new NBioAPI_CHAR [dwLen];. Correspondiente al fragmento de codigo que he puesto antes.

A ver si con estos datos alguien consigue ayudarme.
  #6 (permalink)  
Antiguo 19/05/2005, 06:56
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Con esos datos no puedo saber mucho realmente, incluso depurando el ejecutable sin el codigo tendria una mejor idea al respecto.

Seria muy interesante tener el prototipo de la funcion NBioAPI_Verify y las estructuras relacionadas con la misma (NBioAPI_FIR_TEXTENCODE, etc).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 19/05/2005, 08:47
Avatar de Nietzsche  
Fecha de Ingreso: enero-2005
Ubicación: MALAGA-ESPAÑA
Mensajes: 228
Antigüedad: 19 años, 3 meses
Puntos: 0
El prototipo de la funcion y las estructuras las tengo en una pagina en PDF, no se como puedo ponerlo aqui.

En cuanto a la depuracion del ejecutable. Me podrias aconsejar algun programa debugger bueno para pasarle el ejecutable?

Gracias una vez mas
  #8 (permalink)  
Antiguo 19/05/2005, 11:19
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Un depurador de user-mode bastante simple es el ollydbg: http://home.t-online.de/home/Ollydbg/&e=10313

Si tenes posibilidad de conseguirlo el SoftICE es el mejor.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:15.