Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > FireMonkey
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-05-2022
balger balger is offline
Miembro
 
Registrado: may 2011
Posts: 30
Poder: 0
balger Va por buen camino
fmx dll form

Hola a todos.
Tengo el sig. caso.
en un DLL el procedimiento exportado

Código Delphi [-]
procedure Showxxx; stdcall;
var
  f: Txxx;

begin
  f := Txxx.Create(nil); (FMX)
  f.ShowModal(
    procedure(ModalResult: TModalResult)
    begin
    end);
end;

exports
  Showxxx;

end.

en Txxx

Código Delphi [-]
procedure Txxx.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ModalResult := mrOk;
  Action := TCloseAction.caFree;
end;

El codigo anterior funciona bien desde un exe (no dll)
Cuando cierro el form, en la barra de tareas de Windows se puede observar la vertana abierta (sin imagen). Y al liberar la dll se produce un error de "Access violation".
Estoy usando D10.3 y Firemonkey.
Responder Con Cita
  #2  
Antiguo 28-05-2022
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

No estoy seguro, pero, ¿tal vez sea porque la variable "f" es una variable local en el procedimiento "Showxxx"? Sería fácil de probar: en lugar de usar es variable local, podrías situar la variable fuera del procedimiento "Showxxx". Por otro lado, mientras escribo se me ocurre, que, si vas a mostrar el formulario de forma "modal", entonces tú mismo podrías usar "f.Free" en el mismo procedimiento "Showxxx".

Yo creo que probaría primero con lo último, es decir, con liberar tú mismo con "f.Free", luego de haber mostrado el formulario, de forma que "Action := TCloseAction.caFree;" no fuese necesario. Si pruebas moviendo la variable "f" afuera del procedimiento "Showxxx", también podría omitirse el uso de "Action := TCloseAction.caFree;", acaso, utilizando la cláusula "finalization" de la unidad / archivos de proyecto, es decir, liberar la ya variable "global" en dicha cláusula "finalization".

P.D. En la cláusula "finalization", si al final te decantas por esto, tendrás que comprobar que la instancia del formulario existe realmente en la variable (f <> nil), puesto que al final eso es lo que parece que está ocurriendo: "Action := TCloseAction.caFree;" está intentando liberar una instancia que no existe, ya digo, si no me equivoco, porque dicha instancia se guarda ahora mismo en la variable local "f", y, esta se libera automáticamente cuando se sale del procedimiento "Showxxx".
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
cómo deshabilitar un menu(Form principal) desde otro Form contenido en una DLL dinámi michal C++ Builder 5 22-07-2019 21:55:47
Determinar en un Form Principal cuando se Cierra un Form Hijo Efren2006 OOP 5 26-02-2009 20:08:35
llamar al evento click de un boton q se encuentra en un form desde otro form TURBOIGOR OOP 6 02-12-2008 14:50:16
Como llamar form desde otros form y regresar a la linea que se estaba ejecutando Willy Rodrigo C++ Builder 1 03-08-2007 19:36:23
Imposible hacer visible un form desde otro form SMTZ .NET 13 16-01-2006 21:41:08


La franja horaria es GMT +2. Ahora son las 19:41:56.


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
Copyright 1996-2007 Club Delphi