Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Access Violation onClose (https://www.clubdelphi.com/foros/showthread.php?t=57553)

natalinuyo 19-06-2008 19:45:38

Access Violation onClose
 
Hola a todos,

Entrando directo al tema, mi problema es el siguiente:

El programa es un checador con huella digital. Cuando la aplicación no recibe ninguna huella y le doy en el boton Cerrar, no hay problema, cierra todo el programa...

Sin embargo, cuando le ingreso al menos una huella digital y le doy en el botón Cerrar... según esto si se cierra, pero antes de terminar me manda un Access Violation...

He intentado de todo, en el evento onClose del formulario el tan famoso Action := caFree (pero este me ejecuta de nuevo un timer que tengo en el form y como ya no existe marca el error 1400), he usado el Release, incluso directamente el Application.Terminate y nada.

He buscado en internet, pero como ya expliqué He Intentado Todo!!! y sigo en las mismas... Bueno, tal vez no todo.. por eso acudo a ustedes para ver si me pueden ayudar un poco en esto.

De antemano, muchas gracias por tomarse la molestia de leer mi caso y ayudarme.

Delphius 19-06-2008 20:04:51

Hola natalinuyo,
Para poder ayudarte mejor necesitaríamos ver el código que se ejecuta.
¿Por casualidad estás intentando acceder a un objeto que fue liberado? Por lo general eso es la causa de un Access Violation.

Pero sin conocer mejor tu caso no te sabríamos decir que de modo ayudarte. Deberás explicar y detallar mejor tu caso.

Saludos,

natalinuyo 19-06-2008 20:11:53

Este es el codigo del boton cerrar:
Código Delphi [-]
procedure TFMainForm.Button2Click(Sender: TObject);
begin
     // finalize GrFinger
     FinalizeGrFinger();
     Close;
end;

Este es el codigo del metodo FinalizeGrFinger() que está en la librería uUtil.pas
Código Delphi [-]
procedure FinalizeGrFinger();
begin
   // finalize library
   GrFinalize();
   GrCapFinalize();
   // Closing database
   DB.closeDB();
   DB.Free();
   // Freeing resources
   template.Free();
   FreeMemory(raw.img);
   raw.img := nil;
end;

Adicionalmente tengo el procedimiento OnCloseQuery en el MainForm
Código Delphi [-]
procedure TFMainForm.FormCloseQuery(Sender: TObject; var CanClose:Boolean);
begin
  Release;
end;

Pues yo creo que básicamente es esto... es lo que hago cuando quiero cerrar mi form.

natalinuyo 19-06-2008 20:14:50

Por cierto... Si pongo en el procedimiento OnClose del MainForm:
Código Delphi [-]
procedure TFMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   Action := caFree;
end;

Me ejecuta nuevamente un objeto Timer1 que tengo en el MainForm.
Y obviamente como "ya no existe", marca el error 1400.

Saludos.

luisgutierrezb 19-06-2008 20:51:08

Creo que ya pusiste donde esta el error, no puedes darle a la forma un Release en el closequery

natalinuyo 19-06-2008 20:57:00

El codigo que puse es de una de las tantas pruebas que he hecho... pero ninguna funciona... como indico, he intentado todo...

Si no es Access violation, es Error 1400...

natalinuyo 19-06-2008 21:00:15

Sin nada, unicamente el Close en el botón, me marca error en rtl70.bpl "Error 1400 - El identificador de ventana no es válido".

coso 19-06-2008 21:23:18

no estaras intentando acceder desde otro lado de manera automatica a la form mainform? por ejemplo, con el timer ese que comentabas...

PD : si usas F7,F8 y los breakpoints, encontraras la linea exacta donde te salta la excepcion (siempre y cuando tengas project->options->compiler->debug information todo en on)

natalinuyo 19-06-2008 21:26:15

Mmmm, pues la verdad no, el timer está en el MainForm, ese no está en las demás librerías que tengo... :confused:

Por si las dudas le tenía en inhabilitara el timer1, pero aún así marca error

coso 19-06-2008 21:28:25

Un access violation es cuando intentas acceder a algun objeto que no existe. El 1400 es cuando se intenta acceder a una ventana que tampoco existe. Parece ser que intentas acceder a algo que destruyes cuando se cierra el form. Como te comentaba, usa el F7,F8 y los breakpoints (F5) y asi sabras exactamente donde te salta la excepcion.

natalinuyo 19-06-2008 21:41:25

Este es el asunto:

Con break points y debug:

Doy click en el botón, ejecuta el Close, posteriormente va a terminar la aplicación, en ese momento con el siguiente F7, salta el error... acepto el error y cierra la aplicación.

coso 19-06-2008 21:42:46

Si pulsas F7 antes del close?

coso 19-06-2008 21:44:19

A veces por excepciones continuadas y errores varios mientras se esta programando el delphi se queda tonto (al menos el mio :D). Lo soluciono cerrando y volviendo a entrar. No creo, por eso que, q sea tu caso ya que entonces el error me lo da en vbpl.

coso 19-06-2008 21:46:44

tienes otras forms que se cierran cuando se cierra la main?

natalinuyo 19-06-2008 21:58:57

Pues tengo un form simple, tambien ya lo quité del form principal, para ver si era por algo que me faltaba en ese form (aunque solo tiene un label, no hace nada, pero por si las dudas)...

Pero ps me marca el mismo error, bueno ahora es el 1400 xq ya le quité el Release.

Ps tambien pensé que era el Delphi, pero ps ya hasta reinicié el equipo y nanai :eek:

coso 19-06-2008 22:13:37

has entrado dentro del close a ver hacia donde va el codigo?


La franja horaria es GMT +2. Ahora son las 09:01:29.

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