Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como cerrar una aplicacion sin mensajes de error (https://www.clubdelphi.com/foros/showthread.php?t=39923)

cesar_picazo 02-02-2007 00:42:15

Como cerrar una aplicacion sin mensajes de error
 
Utilizo delphi 6

Buenas tardes hace algunos dias le agregue a mi aplicacion una libreria

utilizando
DLLHandlecat:= LoadLibrary('libre100.DLL');

al terminar la aplicacion
FreeLibrary(DLLHandlecat);

de esta forma cargue como 4 librerias diferentes, al cerrar la aplicacion con

Applitacion.terminate;

Me envia un mensaje de error, el cual no se como eliminarlo al cerrar la aplicacion, access violation at 0x40004af0: read of address 0x02a36e1c' Process Stopped. Use Step or Run to continue.

Al terminar la aplicacion me envia este mensaje y si lo compilo desde delphi me envia a Delphi con un cuadro Gris que dice CPU y presiono F8 y me envia NTdll.ntdllraiseException y se cicla en este mensaje.

Agradeceria si alguien me puede ayudar.

Nota: si no cargo las dlls con loadlibrary no me envia este mensaje de error.

dec 02-02-2007 09:26:52

Hola,

En mi opinión el tema no debe enfocarse en cómo cerrar (forzar el cierre) de una aplicación sin que esto produzca errores, sino en solucionar los errores que se producen al tratar de cerrar la aplicación. Debería ser un poco más explícito en lo que hacen las librerías que usas, en cuál es su cometido y cómo estás utilizándolas.

Las "violaciones de acceso" suelen darse (pero no estoy cien por cien seguro de que sea así siempre) por que se trata de acceder a un segmento de memoria inválido. Por ejemplo, si tratas de cambiar la propiedad "Caption" de un "botón" que no ha sido creado aún o que ya fue destruído... te encontrarías con una "violación de acceso".

Lepe 02-02-2007 12:18:44

Lee la ayuda de LoadLibrary y FreeLibrary, allí te dirán las excepciones que saltaran o como interceptarlas... por ejemplo:
Código Delphi [-]
DLLHandlecat:= LoadLibrary('libre100.DLL');
if DLLHndlecat = 0 then
  // NO  se ha cargado correctamente.

Ya que da fallo en esa parte, deberías poner atención a esas rutinas. Incluso antes de llamar a Application.Terminate (que es una interrupción abrupta de tu programa), ordena liberar las bibliotecas.

Saludos

Pandre 05-02-2007 06:05:11

Buenasss

podrías manejar el cierre de las librerías en la sección finalization de la unidad principal, por ejemplo:

Código Delphi [-]
·
·
·
initialization

finalization
  
  // poner aquí la liberación de las librerías

end.

De esa manera al cierre de la aplicación por el metodo que sea (siempre que no sea matando el proceso), se ejecutará la liberación de las librerías.

Saludos


La franja horaria es GMT +2. Ahora son las 00:25:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi