![]() |
Evitar cerrar formulario principal si hay librerías cargadas dinámicamente
Tengo un formulario contenedor (MDI) en el cuál cargo una librería externa de la siguiente manera:
En el archivo .dll tengo lo siguiente:
Con esto puedo cargar el DLL sin ningún problema y me lo muestra como hijo (MDIChild) de mi formulario principal (MDI). Pero en mi formulario principal (MDI), la variable MDIChildCount siempre me da 0. Aún y cuando yo veo que está el formulario de la DLL creado como hijo (Mdichild). ¿cómo puedo hacer que mi DLL se considere en el formulario principal? Es decir, ¿como puedo hacer que MDIChilCount realmente me cuente mi DLL? Lo que al final quiero lograr, es evitar que se cierre el formulario principal (MDI) si existen DLL cargadas:
Y aprovechando, ¿como puedo hacer para cargar una DLL solo una vez? P.D. Se me olvidó cuál era la correcta definición de una DLL: ¿librería o biblioteca? |
MAIN;
DLLs;
Básicamente el proceso/aplicación principal crea un espacio de memoria compartida en el que residirá nuestro contador, así mismo las DLLs acceden a dicho contador y lo incrementan en uno cuando el formulario que contiene dicha librería es creado. Al momento de ser destruido el formulario NO es liberada la librería del proceso que la ha cargado anteriormente, sin embargo en este caso tan particular su razón de existir termina y decrementamos el contador en uno. Obviamente al intentar cerrar el formulario principal revisará si dicho contador esta en 0, en caso contrario significa que algún formulario no ha sido cerrado, y por ende no es "aconsejable" cerrarlo. Espero te sea de utilidad. Saludos |
Bueno, con respecto al título del hilo;
PD; pues lo pongo porque me he aburrido un poquito :rolleyes:. Saludos |
Cita:
Muy interesante propuesta, el problema que tengo es que no se como detectar cuando se ha cerrado un dll. O mas bien, no se en que punto colocar el FreeLibrary. |
Cita:
|
Cierto, se me olvidó comentar que la primer propuesta que haces, funciona a la perfección. :D
|
La franja horaria es GMT +2. Ahora son las 18:34:23. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi