Tema: Form en DLL
Ver Mensaje Individual
  #6  
Antiguo 10-08-2012
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Reputación: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
En el caso del ejemplo no se debe liberar explícitamente la dll, se realiza automáticamente al terminar el programa. FreeLibrary se usa cuando conoces el HMODULE de la dll que cargaste con LoadLibrary, y no es obligatorio liberarla.

Verás, existen dos formas básicas de que un proceso cargue una dll:
- Una estática automática que la realiza el S.O. al cargar el ejecutable. En la cabecera PE del ejecutable existe una lista de las funciones que se importan denominada IAT (tabla de importación de direcciones).
- Otra dinámica en tiempo de ejecución con LoadLibrary y GetProcAddress. En este caso no estás obligado a liberar la dll, se libera al cerrar la aplicación.

Cada proceso sólo carga una copia de la dll aunque se llame mas de una vez a LoadLibrary. Se tiene in contador interno que aumenta con cada llamada a LoadLibrary y decrece con FreeLibrary. Una dll se libera cuando el contador es cero.

Siempre es posible forzar la liberación de una dll con FreeLibrary pues podemos conocer le HMODULE con GetModuleHandle pero en el caso de una dll cargada estáticamente y que no conocemos, su descarga puede hacer caer al programa con mucha probabilidad.



Saludos.

Última edición por escafandra fecha: 10-08-2012 a las 23:15:56.
Responder Con Cita