¿Qué es un archivo .dll y para qué sirve?
Archivos dll de Windows
Este artículo describe qué es una biblioteca de enlace dinámico (DLL) y los diversos problemas que pueden surgir cuando se utilizan DLL. También se describen algunas cuestiones avanzadas que deberías tener en cuenta al desarrollar tus propias DLL.
En el caso de los sistemas operativos Windows, gran parte de la funcionalidad del sistema operativo se proporciona mediante DLL. Además, cuando se ejecuta un programa en uno de estos sistemas operativos Windows, gran parte de la funcionalidad del programa puede ser proporcionada por DLL. Por ejemplo, algunos programas pueden contener muchos módulos diferentes, y cada módulo del programa está contenido y distribuido en DLLs.
El uso de DLLs ayuda a promover la modularización del código, la reutilización del código, el uso eficiente de la memoria y la reducción del espacio en disco. Así, el sistema operativo y los programas se cargan más rápido, se ejecutan más rápido y ocupan menos espacio en el disco del ordenador.
Cuando un programa utiliza una DLL, un problema que se llama dependencia puede hacer que el programa no se ejecute. Cuando un programa utiliza una DLL, se crea una dependencia. Si otro programa sobrescribe y rompe esta dependencia, es posible que el programa original no se ejecute correctamente.
Añadir dll al proyecto visual studio
La biblioteca de enlace dinámico (DLL) es la implementación de Microsoft del concepto de biblioteca compartida en los sistemas operativos Microsoft Windows y OS/2. Estas bibliotecas suelen tener la extensión de archivo DLL, OCX (para las bibliotecas que contienen controles ActiveX) o DRV (para los controladores de sistemas heredados).
Los formatos de archivo de las DLL son los mismos que los de los archivos EXE de Windows, es decir, Portable Executable (PE) para Windows de 32 y 64 bits, y New Executable (NE) para Windows de 16 bits. Al igual que los EXE, las DLL pueden contener código, datos y recursos, en cualquier combinación.
Los archivos de datos con el mismo formato de archivo que una DLL, pero con diferentes extensiones de archivo y que posiblemente sólo contengan secciones de recursos, pueden denominarse DLL de recursos. Ejemplos de estas DLL son las bibliotecas de iconos, que a veces tienen la extensión ICL, y los archivos de fuentes, que tienen las extensiones FON y FOT[1].
Las primeras versiones de Microsoft Windows ejecutaban los programas juntos en un único espacio de direcciones. Cada programa debía cooperar cediendo la CPU a otros programas para que la interfaz gráfica de usuario (GUI) pudiera realizar varias tareas y tener la máxima capacidad de respuesta. Todas las operaciones a nivel de sistema operativo eran proporcionadas por el sistema operativo subyacente: MS-DOS. Todos los servicios de nivel superior los proporcionaban las bibliotecas de Windows “Dynamic Link Library”. La API de dibujo, Graphics Device Interface (GDI), se implementaba en una DLL llamada GDI.EXE, la interfaz de usuario en USER.EXE. Estas capas adicionales sobre el DOS tenían que ser compartidas por todos los programas de Windows que se ejecutaban, no sólo para permitir que Windows funcionara en una máquina con menos de un megabyte de RAM, sino para permitir que los programas cooperaran entre sí. El código de GDI tenía que traducir las órdenes de dibujo a operaciones en dispositivos específicos. En la pantalla, tenía que manipular los píxeles de la memoria intermedia. Al dibujar en una impresora, las llamadas a la API tenían que transformarse en peticiones a una impresora. Aunque podría haber sido posible proporcionar soporte codificado para un conjunto limitado de dispositivos (como la pantalla del Adaptador de Gráficos en Color, el Lenguaje de Comandos de Impresoras HP LaserJet), Microsoft eligió un enfoque diferente. GDI funcionaría cargando diferentes piezas de código, llamadas “controladores de dispositivos”, para trabajar con diferentes dispositivos de salida.
Qué es una DLL
Las DLL son tan parecidas a los EXE que el propio formato de archivo es el mismo. Tanto los EXE como las DLL se basan en el formato de archivo Portable Executable (PE). Las DLL también pueden contener componentes COM y bibliotecas .NET.
En prácticamente todos los sistemas operativos, hay dos tipos de bibliotecas. Las bibliotecas estáticas y las dinámicas. En Windows las extensiones de los archivos son las siguientes: Bibliotecas estáticas (.lib) y bibliotecas dinámicas (.dll). La principal diferencia es que las bibliotecas estáticas se enlazan con el ejecutable en tiempo de compilación, mientras que las dinámicas no se enlazan hasta el tiempo de ejecución.
Los archivos DLL son archivos binarios que pueden contener código ejecutable y recursos como imágenes, etc. A diferencia de las aplicaciones, no pueden ejecutarse directamente, sino que una aplicación los cargará a medida que los necesite (o todos a la vez durante el arranque).
Del mismo modo que una aplicación requiere un archivo DLL, un archivo DLL puede depender de otros archivos DLL. Si uno de estos archivos DLL en la cadena de dependencia no se encuentra, la aplicación no se cargará. Esto se puede depurar fácilmente utilizando cualquier herramienta de recorrido de dependencias, como Dependency Walker.
Leer archivos DLL
Aunque se puede buscar fácilmente en Internet para solucionar un problema relacionado con los archivos DLL, esto hace que surja la pregunta: ¿qué es un archivo DLL y por qué le importa a tu ordenador que falte uno? Así pues, empecemos con una breve introducción sobre los archivos DLL y cómo encajan en todo el entorno de Windows.
En primer lugar, veamos qué significa “DLL”. Las siglas significan “Dynamic Link Libraries”, y para entender mejor lo que es un archivo DLL, tenemos que entender bien lo que es una “biblioteca” en términos informáticos.
Cuando ejecutas un procesador de textos, es posible que tenga que ejecutar una tarea específica para la que no tiene el código. Por ejemplo, supongamos que quieres imprimir algo en el procesador de textos, pero el programa no tiene ni idea de cómo hacerlo. En este caso, el programa tendrá que tomar prestadas las instrucciones de otro programa construido específicamente para proporcionar la funcionalidad de impresión.
Aquí es donde entran en juego las bibliotecas preconstruidas. Proporcionarán todo el código necesario al procesador de textos para ayudarle a imprimir su trabajo siempre que el programa lo requiera. Este concepto de bibliotecas se basa en el marco de la programación modular, un concepto de desarrollo de software en el que un programa se divide en subprogramas independientes que pueden ejecutarse por sí solos.