¿Qué son las DLL de Windows?

De Departamento de Informatica
Saltar a: navegación, buscar
Icono que representa un archivo DLL, en su versión desde Windows Vista en adelante

Las librerías de enlace dinámico (conocidas por su sigla en inglés DLL, abreviatura de Dynamic-Link Libraries) son archivos que contienen un código ejecutable, el cuál es cargado mediante el sistema operativo bajo una demanda de uso. Las DLL son exclusivamente de los sistemas operativos Windows, aunque el concepto de enlace dinámico está presente en todos los sistemas operativos. Los archivos se caracterizan por tener la extensión .dll; no obstante, también pueden tener la extensión .EXE u otra extensión (Kernel.exe, User.exe y Gdi.exe). Son el equivalente de los objetos compartidos de Unix (shared object, o conocidos por su extensión .so) ya que ambos trabajan bajo la misma lógica.

Contenido

Función de las DLL

Uso de una DLL

Los archivos DLL se encargan de las acciones que son de uso frecuente en Windows y estos archivos pueden ser utilizados por muchos programas al mismo tiempo. Estos archivos permiten que los programas no tengan que incluir ciertas funciones que el sistema operativo les facilita, por ejemplo imprimir un documento, el programa sólo tiene que llamar a la DLL que corresponde, esto permite ahorrar espacio en el disco duro ya que los programas son más pequeños.

Como los archivos DLL no son parte de los programas optimiza el uso de la memoria RAM ya que sólo son llamados a la memoria RAM cuando el programa los necesita y no están cargados durante toda la ejecución del programa.

Los programadores también pueden crear sus propias DLLs, estas son generalmente útiles en programas de gran tamaño. Por ejemplo si queremos construir una aplicación para Windows que consiste en varios subprogramas que además tienen varias rutinas comunes. Para modularizar el código podemos tomar todas esas subrutinas comunes y ponerlas en un archivo con extensión .LIB; entonces después podemos agregar esta librería a cada uno de los módulos de nuestro programa. Pero esta no sería la mejor opción, ya que en caso de editar alguna de las subrutinas mencionadas, será necesario recompilar cada uno de los subprogramas. Una mejor aproximación sería ponerlas en una DLL ya que en caso de realizar un cambio en esta, no será necesario tocar los módulos de nuestro programa.

Declaración y llamada de una DLL

Para cargar un archivo DLL, el programa tiene que declarar la función DLL. Una DLL puede tener muchas funciones diferentes en el mismo. Luego, cuando sea necesario se realiza la llamada con los parámetros requeridos.

A continuación vemos como aparecería en un programa una declaración y llamada. Este ejemplo se ha simplificado para que podamos entenderlo mejor:

Declare GetFreeSpacex, Kernel32.dll (Drive_Letter, Buffers_If_Any, Value_Returned)

Ahora ejecutemos un programa y hagamos la llamada. La DLL no es cargada en ram hasta la siguiente linea.

GetFreeSpacex "C",Buffers_If_Any, Drive_Letter

Se mostrará la cantidad de espacio libre en la unidad C.

Use a MessageBox = "The free space on drive C: is ", Value_Returned, "bytes"

Una llamada o declaración incorrecta podría producir una GPF(General Protection Fault). Si la version de la DLL es la incorrecta para el sistema operativo se producirá un GPF o un bloqueo del sistema.

DLLs y manejo de memoria

Para que un proceso pueda hacer llamadas a las funciones de una DLL es necesario que esta sea cargada en el espacio de memoria virtual del proceso. El sistema mantiene un contador de referencias de programas por cada DLL. Cuando un proceso carga una DLL este contador se incrementa en uno. Cuando el proceso termina o cuando el contador sea 0, la DLL es descargada del espacio de memoria virtual del proceso.

Como cualquier otra, una función exportada de una DLL se ejecuta en el contexto del thread que la solicitó. Por lo tanto las siguientes condiciones se aplican:

  • Los threads del proceso que llamó a la DLL pueden usar los controladores abiertos por la DLL. Del mismo modo los controladores abiertos por dichos threads pueden ser ocupados por la DLL.
  • La DLL usa el Stack del thread y el espacio de memoria virtual del proceso que la llama.
  • La DLL usa memoria del espacio de memoria virtual del proceso que la llama.

Archivos DLL privados

Estos archivos DLL son instalados por una aplicación en específico y utilizados sólo por esa aplicación. A los archivos DLL privados también se las llama únicos ya que el programa utiliza una copia privada de la DLL en vez de la DLL genérica.

Referencias

Herramientas personales
Espacios de nombres
Variantes
Acciones
Navegación
Herramientas