Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-09-2011
_cero_ _cero_ is offline
Miembro
 
Registrado: abr 2007
Posts: 147
Poder: 18
_cero_ Va por buen camino
Red face Es necesario usar FreeLibrary?

Como están todos, espero que bien .

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?
Responder Con Cita
  #2  
Antiguo 23-09-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
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.
Responder Con Cita
  #3  
Antiguo 23-09-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #4  
Antiguo 23-09-2011
_cero_ _cero_ is offline
Miembro
 
Registrado: abr 2007
Posts: 147
Poder: 18
_cero_ Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 24-09-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Que alguien quite esos corchetes de mi nombre.

_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.
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
mysql_close() - ¿Es Necesario? D-MO PHP 3 01-02-2006 21:12:12
Conectar con mysql necesario bde? Sayuri Conexión con bases de datos 0 23-12-2005 15:36:56
Es necesario el BDE? juliopag1 Conexión con bases de datos 2 15-12-2005 19:22:19
FreeLibrary Ricardo León API de Windows 7 07-10-2005 12:20:23
¿Es necesario el inglés? roman Debates 14 04-11-2003 15:19:32


La franja horaria es GMT +2. Ahora son las 01:46:05.


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