Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Es necesario usar FreeLibrary? (https://www.clubdelphi.com/foros/showthread.php?t=75868)

_cero_ 23-09-2011 20:56:37

Es necesario usar FreeLibrary?
 
Como están todos, espero que bien :D.

Verán tengo una aplicación que se encarga de cargar plug-in que están en forma de dll, estos plug-in (por diseño), se cargan al inicio y se descargan al final de la aplicación, el punto es que ocasional mente al cerrar la aplicación me tira errores, supongo de que se intenta liberar algo que ya se liberó antes, y digo supongo, porque solo me muestra un dialogo que dice “abnormal termination” y la aplicación se queda abierta (lo digo porque se puede ver en la lista de procesos). Por otro lado me he dado cuenta de que si no uso “FreeLibrary” para liberar los plug-in, la aplicacion se cierra correctamente.

Mis dudas son: que pasa con las dll si no uso FreeLibrary? Se quedan cargadas? Crean algún lastre para el sistema? el sistema se encarga de liberarlas cuando mi aplicación termina?

Al González 23-09-2011 22:06:08

Veamos que dice MSDN:
Cita:

The system maintains a per-process reference count for each loaded module. A module that was loaded at process initialization due to load-time dynamic linking has a reference count of one. The reference count for a module is incremented each time the module is loaded by a call to LoadLibrary.

[...]

The reference count is decremented each time the FreeLibrary or FreeLibraryAndExitThread function is called for the module. When a module's reference count reaches zero or the process terminates, the system unloads the module from the address space of the process.
http://msdn.microsoft.com/es-es/site/ms683152

Según se colige, al terminar el programa la DLL también desocupa la memoria que usó en relación con el programa. Quedando totalmente descargada de la memoria de Windows si ningún otro programa la está usando.

Un abrazo liberado.

Al González. :)

roman 23-09-2011 22:15:34

Pero con esto pareceríamos decir: ok, ni te preocupes por descargar las bibliotecas pues al cerrar tu programa todo se limpia. Pero queda la cuestión de porqué está fallando pues esta documentación no indica que no deban descargarse manualmente las bibliotecas. En el caso de aplicaciones con aditamentos no sería raro, creo yo, encontrarse con la necesidad de poder descargar bibliotecas previamente cargadas, a discreción del usuario.

// Saludos

_cero_ 23-09-2011 22:46:20

Ps gracias por despejar mis dudas y paranoias [Al González]. :)

roman, totalmente cierto sobre que tendré que encontrar la raíz del problema, la cuestión es que estos plug-in pueden tener formularios, frames u otros objetos que se ocupan en x tareas, yo intento liberar por mí mismo todo lo que el plug-in ocupa, para que al cerrar la aplicación solo se libere la librería, pero ahí está la cuestión, “ocasionalmente” no libera alguna, no sé si es porque yo libere los recursos antes e intenta volver a liberarlos, o si es por cualquier otra razón, al ser un problema que pasa de vez en cuando y además no da información de ningún tipo, se me dificulta saber él porque, por otro lado, si no importa dejar de usar FreeLibrary, entonces para que invertirle más tiempo? si de todas maneras todas las dll que cargo al inicio no las libero hasta el final (cuestión de diseño).

Pd. Muchas gracias por el link, nos vemos.

Al González 24-09-2011 00:05:13

Que alguien quite esos corchetes de mi nombre. :D

_cero_, no fue nada ponerte ese enlace para ayudarte de algún modo con tu asunto de bibliotecas. ;)

Román, Tienes razón en lo que dices. Normalmente no propongo una solución rápida sin antes recomendar ir al fondo del problema. Sucedió que esta vez quise limitarme a la pregunta de _cero_:
Cita:

Mis dudas son: que pasa con las dll si no uso FreeLibrary? Se quedan cargadas? Crean algún lastre para el sistema? el sistema se encarga de liberarlas cuando mi aplicación termina?
Saludos.


La franja horaria es GMT +2. Ahora son las 16:23:18.

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