DLL Manual e caracteristivas Una biblioteca de enlace dinámico o más comúnmente DLL (sigla en inglés de dynamic-link library) es el término con el que se refiere a los archivos con código ejecutable que se cargan bajo demanda de un programa por parte del sistema operativo. Esta denominación es exclusiva a los sistemas operativos Windows siendo ".dll" la extensión con la que se identifican estos ficheros, aunque el concepto existe en prácticamente todos los sistemas operativos modernos. Ventajas[editar] Las DLL son o se pueden ver como la evolución de las bibliotecas estáticas (en diversos sistemas) y de forma análoga contienen funcionalidad o recursos que utilizan otras aplicaciones. Su uso proporciona algunas ventajas: Reducen el tamaño de los archivos ejecutables: Gran parte del código puede estar almacenado en bibliotecas y no en el propio ejecutable lo que redunda en una mejor modularización. Pueden estar compartidas entre varias aplicaciones: Si el código es suficientemente genérico, puede resultar de utilidad para múltiples aplicaciones (por ejemplo, la MFC es una biblioteca dinámica con clases genéricas que recubren la API gráfica de Windows y que usan gran parte de las aplicaciones). Facilitan la gestión y aprovechamiento de la memoria del sistema: La carga dinámica permite al sistema operativo aplicar algoritmos que mejoren el rendimiento del sistema cuando se carguen estas bibliotecas. Además, al estar compartidas, basta con mantener una copia en memoria para todos los programas que la utilicen. Brindan mayor flexibilidad frente a cambios: Es posible mejorar el rendimiento o solucionar pequeños errores distribuyendo únicamente una nueva versión de la biblioteca dinámica. Nuevamente, esta corrección o mejora será aprovechada por todas las aplicaciones que compartan la biblioteca. «Infierno de las DLL»[editar] Artículo principal: DLL Hell Sin embargo, no todo son ventajas. En los sistemas Windows, las DLL son muy comunes y muchos programas usan las mismas bibliotecas de enlace dinámico. Pero debido a la evolución, cada una de las bibliotecas evoluciona incorporando mejoras pero modificándolas de tal forma que dejan de ser compatibles. Esto puede producir dos efectos no deseados: Que la instalación de un programa reemplace una DLL con una nueva versión incompatible. Que la desinstalación del programa borre una DLL compartida. En ambos casos, el resultado es que dejan de funcionar los programas que utilizaban la vieja versión. Estos problemas se denominaron el «infierno de las DLL». Las versiones modernas de Windows y los nuevos scripts de instalación MSI (sobre todo su característica de instalaciones residentes) abordan y resuelven este problema. Sin embargo, el problema persiste cuando se utilizan otros instaladores (versiones antiguas) o se realizan modificaciones manuales. Biblioteca de enlace dinámico Desarrollador Microsoft Información general Extensión de .dll archivo Tipo de MIME application/x-msdownload Uniform Type com.microsoft.windows-dynamic- Identifier link-library Número mágico MZ Contenedor para Biblioteca compartida Formato abierto ? ¿Qué es un archivo DLL? Contenido proporcionado por Microsoft IMPORTANTE: Este artículo es el resultado de una traducción automática realizada mediante software de Microsoft y no por un traductor profesional. Microsoft ofrece artículos traducidos por profesionales, artículos generados mediante traducción automática y traducciones de artículos de la comunidad Microsoft, para que puedas tener acceso a todos los artículos de la base de conocimiento en tu propio idioma. Es importante tener en cuenta que los artículos generados mediante traducciones automáticas, incluyendo los que hayan sido revisados por la comunidad Microsoft, pueden incluir errores de vocabulario, sintaxis o gramática. No puede considerarse responsable a Microsoft de posibles imprecisiones o errores, ni de cualquier perjuicio que pueda ser consecuencia de una traducción incorrecta del contenido o de su uso. Ver el artículo original en inglés: 815065 Seleccione la versión del producto Todos los productos Resumen En este artículo se describe lo que es una biblioteca de vínculos dinámicos (DLL) y los diversos problemas que pueden producirse al usar archivos DLL. A continuación, en este artículo se describen algunos problemas avanzados que debe tener en cuenta al desarrollar sus propios archivos DLL. Al describir lo que es un archivo DLL, en este artículo se describen los métodos de vinculación dinámica, las dependencias de DLL, los puntos de entrada de DLL, la exportación de funciones DLL y las herramientas de solución de problemas de DLL. Este artículo finaliza con una comparación de alto nivel de archivos DLL con los ensamblados de Microsoft .NET Framework. INTRODUCCIÓN Para los sistemas operativos Microsoft Windows que se enumeran en la sección "Se aplica a", gran parte de la funcionalidad del sistema operativo se proporciona mediante bibliotecas de vínculos dinámicos (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 los archivos DLL. Por ejemplo, algunos programas pueden contener muchos módulos diferentes, y cada módulo del programa está contenido y distribuido en DLL.El uso de archivos DLL ayuda a promover la modularización de código, reutilización de código, uso eficiente de memoria y reducción de espacio en disco. Por lo tanto, el sistema operativo y los programas se cargan más rápido, se ejecutan más rápido y toman menos espacio en disco en el equipo. Cuando un programa utiliza un archivo DLL, un problema que se denomina dependencia puede hacer que el programa no se ejecute. Cuando un programa utiliza un archivo DLL, se crea una dependencia. Si otro programa sobrescribe y rompe esta dependencia, es posible que el programa original no se ejecute correctamente. Con la introducción de Microsoft .NET Framework, la mayoría de los problemas de dependencia se han eliminado mediante ensamblados. Más información ¿Qué es un archivo DLL? Un archivo DLL es una biblioteca que contiene código y datos que pueden ser utilizados por más de un programa al mismo tiempo. Por ejemplo, en los sistemas operativos Windows, el archivo DLL Comdlg32 realiza funciones comunes relacionadas con el cuadro de diálogo. Por lo tanto, cada programa puede usar la funcionalidad contenida en este archivo DLL para implementar un cuadro de diálogo Abrir. Esto ayuda a promover la reutilización del código y el uso eficiente de la memoria. Mediante el uso de un archivo DLL, un programa se puede modular en componentes independientes. Por ejemplo, un programa de contabilidad se puede vender por módulo. Cada módulo se puede cargar en el programa principal en tiempo de ejecución si ese módulo está instalado. Dado que los módulos son independientes, el tiempo de carga del programa es más rápido y solo se carga un módulo cuando se solicita esa funcionalidad. Además, las actualizaciones son más fáciles de aplicar a cada módulo sin afectar a otras partes del programa. Por ejemplo, puede tener un programa de nómina y las tasas de impuestos cambian cada año. Cuando estos cambios se aíslan en un archivo DLL, puede aplicar una actualización sin necesidad de compilar o instalar todo el programa de nuevo. En la lista siguiente se describen algunos de los archivos que se implementan como archivos DLL en los sistemas operativos Windows: Archivos de controles ActiveX (.ocx) Un ejemplo de un control ActiveX es un control de calendario que le permite seleccionar una fecha de un calendario. Archivos del Panel de control (.cpl) Un ejemplo de un archivo .cpl es un elemento que se encuentra en el Panel de control. Cada elemento es un archivo DLL especializado. Archivos del controlador de dispositivo (.drv) Un ejemplo de controlador de dispositivo es un controlador de impresora que controla la impresión en una impresora. Ventajas de DLL En la lista siguiente se describen algunas de las ventajas que se proporcionan cuando un programa utiliza un archivo DLL: Utiliza menos recursos Cuando varios programas utilizan la misma biblioteca de funciones, un archivo DLL puede reducir la duplicación de código que se carga en el disco y en la memoria física. Esto puede influir en gran medida en el rendimiento no sólo del programa que se ejecuta en primer plano, sino también otros programas que se ejecutan en el sistema operativo Windows. Promueve la arquitectura modular Un archivo DLL ayuda a promover el desarrollo de programas modulares. Esto le ayuda a desarrollar programas grandes que requieren varias versiones de idioma o un programa que requiere arquitectura modular. Un ejemplo de un programa modular es un programa de contabilidad que tiene muchos módulos que se pueden cargar dinámicamente en tiempo de ejecución. Facilita la implementación y la instalación Cuando una función dentro de un archivo DLL necesita una actualización o una corrección, la implementación e instalación del archivo DLL no requiere que el programa se vuelva a vincular con el archivo DLL. Además, si varios programas utilizan el mismo archivo DLL, todos los programas se beneficiarán de la actualización o la corrección. Este problema puede producirse con más frecuencia cuando se utiliza un archivo DLL de terceros que se actualiza o se corrige regularmente. Dependencias de DLL Cuando un programa o un archivo DLL utiliza una función DLL en otro archivo DLL, se crea una dependencia. Por lo tanto, el programa ya no es autónomo, y el programa puede experimentar problemas si se rompe la dependencia. Por ejemplo, es posible que el programa no se ejecute si se produce una de las siguientes acciones: Un archivo DLL dependiente se actualiza a una nueva versión. Se corrige un archivo DLL dependiente. Un archivo DLL dependiente se sobrescribe con una versión anterior. Un archivo DLL dependiente se quita del equipo. Estas acciones se conocen generalmente como conflictos DLL. Si no se aplica la compatibilidad con versiones anteriores, es posible que el programa no se ejecute correctamente. En la lista siguiente se describen los cambios que se han introducido en Microsoft Windows 2000 y en sistemas operativos Windows posteriores para ayudar a minimizar los problemas de dependencia: Protección de archivos de Windows En Protección de archivos de Windows, el sistema operativo impide que un agente no autorizado actualice o elimine los archivos DLL del sistema. Por lo tanto, cuando una instalación del programa intenta quitar o actualizar un archivo DLL que se define como un archivo DLL del sistema, Windows File Protection buscará una firma digital válida. DLL privadas Los archivos DLL privados le permiten aislar un programa de los cambios realizados en los archivos DLL compartidos. Para usar archivos DLL privados, busque los archivos DLL en la carpeta raíz del programa. A continuación, para los nuevos programas, agregue información específica de la versión al archivo DLL. Para programas antiguos, utilice un archivo .local vacío. Cada método indica al sistema operativo que utilice los archivos DLL privados que se encuentran en la carpeta raíz del programa. Herramientas de solución de problemas de DLL Hay varias herramientas disponibles para ayudarle a solucionar problemas de DLL. Las siguientes herramientas son algunas de estas herramientas. Dependency Walker La herramienta Dependency Walker puede buscar recursivamente todos los archivos DLL dependientes que utiliza un programa. Al abrir un programa en Dependency Walker, Dependency Walker realiza las siguientes comprobaciones: Dependency Walker comprueba si faltan archivos DLL. Dependency Walker comprueba si hay archivos de programa o archivos DLL que no son válidos. Dependency Walker comprueba que las funciones de importación y exportación coincidan. Dependency Walker comprueba si hay errores de dependencia circulares. Dependency Walker comprueba si hay módulos que no son válidos porque los módulos son para un sistema operativo diferente. Mediante el uso de Dependency Walker, puede documentar todos los archivos DLL que utiliza un programa. Esto puede ayudar a prevenir y corregir los problemas de DLL que pueden ocurrir en el futuro. Dependency Walker se encuentra en el siguiente directorio al instalar Microsoft Visual Studio 6.0: unidadde archivos de programa, Microsoft Visual Studio, Common, Herramientas Solucionador de problemas universal de DLL La herramienta DLL Universal Problem Solver (DUPS) se utiliza para auditar, comparar, documentar y mostrar información de DLL. En la lista siguiente se describen las utilidades que componen la herramienta DUPS: Dlister.exe Esta utilidad enumera todos los archivos DLL del equipo y registra la información en un archivo de texto o en un archivo de base de datos. Dcomp.exe Esta utilidad compara los archivos DLL que se enumeran en dos archivos de texto y genera un tercer archivo de texto que contiene las diferencias. Dtxt2DB.exe Esta utilidad carga los archivos de texto que se crean mediante la utilidad Dlister.exe y la utilidad Dcomp.exe en la base de datos dllHell. DlgDtxt2DB.exe Esta utilidad proporciona una versión de interfaz gráfica de usuario (GUI) de la utilidad Dtxt2DB.exe. Para obtener más información acerca de la herramienta DUPS, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base: 247957 Uso de DUPS.exe para resolver problemas de compatibilidad con DLL Base de datos de ayuda de DLL La base de datos de Ayuda de DLL le ayuda a localizar versiones específicas de archivos DLL instalados por los productos de software de Microsoft. Desarrollo de DLL En esta sección se describen los problemas y los requisitos que debe tener en cuenta al desarrollar sus propios archivos DLL. Tipos de archivos DLL Al cargar un archivo DLL en una aplicación, dos métodos de vinculación permiten llamar a las funciones DLL exportadas. Los dos métodos de vinculación son la vinculación dinámica en tiempo de carga y la vinculación dinámica en tiempo de ejecución. Vinculación dinámica en tiempo de carga En la vinculación dinámica en tiempo de carga, una aplicación realiza llamadas explícitas a funciones DLL exportadas como funciones locales. Para utilizar la vinculación dinámica en tiempo de carga, proporcione un archivo de encabezado (.h) y un archivo de biblioteca de importación (.lib) al compilar y vincular la aplicación. Al hacerlo, el vinculador proporcionará al sistema la información necesaria para cargar el archivo DLL y resolver las ubicaciones de función DLL exportadas en tiempo de carga. Vinculación dinámica en tiempo de ejecución En la vinculación dinámica en tiempo de ejecución, una aplicación llama a la función LoadLibrary o a la función LoadLibraryEx para cargar el archivo DLL en tiempo de ejecución. Una vez que el archivo DLL se carga correctamente, utilice la función GetProcAddress para obtener la dirección de la función DLL exportada a la que desea llamar. Cuando se utiliza la vinculación dinámica en tiempo de ejecución, no es necesario un archivo de biblioteca de importación. En la lista siguiente se describen los criterios de aplicación para cuándo utilizar la vinculación dinámica en tiempo de carga y cuándo utilizar la vinculación dinámica en tiempo de ejecución: Rendimiento de la startup Si el rendimiento inicial de inicio de la aplicación es importante, debe usar la vinculación dinámica en tiempo de ejecución. Facilidad de uso En la vinculación dinámica en tiempo de carga, las funciones DLL exportadas son como funciones locales. Esto hace que sea fácil para usted llamar a estas funciones. Lógica de la aplicación En la vinculación dinámica en tiempo de ejecución, una aplicación puede bifurcarse para cargar diferentes módulos según sea necesario. Esto es importante cuando se desarrollan versiones en varios idiomas. El punto de entrada de DLL Al crear un archivo DLL, puede especificar opcionalmente una función de punto de entrada. Se llama a la función de punto de entrada cuando los procesos o subprocesos se adjuntan al archivo DLL o se separan del archivo DLL. Puede utilizar la función de punto de entrada para inicializar estructuras de datos o para destruir estructuras de datos según lo requiera el archivo DLL. Además, si la aplicación es multiproceso, puede usar el almacenamiento local de subprocesos (TLS) para asignar memoria privada a cada subproceso de la función de punto de entrada. El código siguiente es un ejemplo de la función de punto de entrada DLL. BOOL APIENTRY DllMain( HANDLE hModule,// Handle to DLL module DWORD ul_reason_for_call,// Reason for calling function LPVOID lpReserved ) // Reserved { switch ( ul_reason_for_call ) { case DLL_PROCESS_ATTACHED: // A process is loading the DLL. break; case DLL_THREAD_ATTACHED: // A process is creating a new thread. break; case DLL_THREAD_DETACH: // A thread exits normally. break; case DLL_PROCESS_DETACH: // A process unloads the DLL. break; } return TRUE; } Cuando la función de punto de entrada devuelve un valor FALSE, la aplicación no se iniciará si utiliza la vinculación dinámica en tiempo de carga. Si utiliza la vinculación dinámica en tiempo de ejecución, solo se cargará el archivo DLL individual. La función de punto de entrada solo debe realizar tareas de inicialización sencillas y no debe llamar a ninguna otra función de carga o terminación de DLL. Por ejemplo, en la función de punto de entrada, no debe llamar directa o indirectamente a la función LoadLibrary o a la función LoadLibraryEx. Además, no debe llamar a la función FreeLibrary cuando finaliza el proceso. Nota En aplicaciones multiproceso, asegúrese de que el acceso a los datos globales de DLL está sincronizado (seguro para subprocesos) para evitar posibles daños en los datos. Para ello, use TLS para proporcionar datos únicos para cada subproceso. Exportación de funciones DLL Para exportar funciones DLL, puede agregar una palabra clave de función a las funciones DLL exportadas o crear un archivo de definición de módulo (.def) que muestre las funciones DLL exportadas. Para utilizar una palabra clave function, debe declarar cada función que desea exportar con la siguiente palabra clave: __declspec(dllexport) Para utilizar funciones DLL exportadas en la aplicación, debe declarar cada función que desea importar con la siguiente palabra clave: __declspec(dllimport) Normalmente, usaría un archivo de encabezado que tiene una instrucción define y una instrucción ifdef para separar la instrucción export y la instrucción import. También puede utilizar un archivo de definición de módulo para declarar funciones DLL exportadas. Cuando se utiliza un archivo de definición de módulo, no es necesario agregar la palabra clave function a las funciones DLL exportadas. En el archivo de definición de módulo, se declaran la instrucción LIBRARY y la instrucción EXPORTS para el archivo DLL. El código siguiente es un ejemplo de un archivo de definición. // SampleDLL.def // LIBRARY "sampleDLL" EXPORTS HelloWorld DLL de ejemplo y aplicación En Microsoft Visual C++ 6.0, puede crear un archivo DLL seleccionando el tipo de proyecto Biblioteca de vínculos dinámicos de Win32 o el Tipo de proyecto MFC AppWizard (dll). El código siguiente es un ejemplo de un archivo DLL que se creó en Visual C++ mediante el uso de la Tipo de proyecto Win32 Dynamic-Link Library. // SampleDLL.cpp // #include "stdafx.h" #define EXPORTING_DLL #include "sampleDLL.h" BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } void HelloWorld() { MessageBox( NULL, TEXT("Hello World"), TEXT("In a DLL"), MB_OK); } // File: SampleDLL.h // #ifndef INDLL_H #define INDLL_H #ifdef EXPORTING_DLL extern __declspec(dllexport) void HelloWorld() ; #else extern __declspec(dllimport) void HelloWorld() ; #endif #endif El código siguiente es un ejemplo de un proyecto de aplicación Win32 que llama a la función DLL exportada en el archivo DLL SampleDLL. // SampleApp.cpp // #include "stdafx.h" #include "sampleDLL.h" int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HelloWorld(); return 0; } Nota En la vinculación dinámica en tiempo de carga, debe vincular la biblioteca de importación SampleDLL.lib que se crea al compilar el proyecto SampleDLL. En la vinculación dinámica en tiempo de ejecución, se usa código similar al código siguiente para llamar a la función DLL exportada SampleDLL.dll. ... typedef VOID (*DLLPROC) (LPTSTR); ... HINSTANCE hinstDLL; DLLPROC HelloWorld; BOOL fFreeDLL; hinstDLL = LoadLibrary("sampleDLL.dll"); if (hinstDLL != NULL) { HelloWorld = (DLLPROC) GetProcAddress(hinstDLL, "HelloWorld"); if (HelloWorld != NULL) (HelloWorld); fFreeDLL = FreeLibrary(hinstDLL); } ... Al compilar y vincular la aplicación SampleDLL, el sistema operativo Windows busca el archivo DLL SampleDLL en las siguientes ubicaciones en este orden: 1. La carpeta de la aplicación 2. La carpeta actual 3. La carpeta del sistema de Windows Nota La función GetSystemDirectory devuelve la ruta de acceso de la carpeta del sistema de Windows. 4. La carpeta Windows Nota La función GetWindowsDirectory devuelve la ruta de acceso de la carpeta windows. El ensamblado de .NET Framework Con la introducción de Microsoft .NET y .NET Framework, la mayoría de los problemas asociados con los archivos DLL se han eliminado mediante ensamblados. Un ensamblado es una unidad lógica de funcionalidad que se ejecuta bajo el control de Common Language Runtime (CLR) de .NET. Un ensamblado existe físicamente como un archivo .dll o como un archivo .exe. Sin embargo, internamente un ensamblado es muy diferente de un archivo DLL de Microsoft Win32. Un archivo de ensamblado contiene un manifiesto de ensamblado, metadatos de tipo, código de lenguaje intermedio de Microsoft (MSIL) y otros recursos. El manifiesto del ensamblado contiene los metadatos del ensamblado que proporcionan toda la información necesaria para que un ensamblado se describa por sí mismo. La siguiente información se incluye en el manifiesto del ensamblado: Nombre del ensamblado Información de la versión Información sobre cultura Información de nombres fuertes La lista de ensamblados de archivos Escriba información de referencia Información de ensamblaje referenciada y dependiente El código MSIL contenido en el ensamblado no se puede ejecutar directamente. En su lugar, la ejecución de código MSIL se administra a través de CLR. De forma predeterminada, al crear un ensamblado, el ensamblado es privado para la aplicación. Para crear un ensamblado compartido es necesario asignar un nombre seguro al ensamblado y, a continuación, publicar el ensamblado en la caché global de ensamblados. En la lista siguiente se describen algunas de las características de los ensamblados en comparación con las características de los archivos DLL de Win32: Autodescriptivo Al crear un ensamblado, toda la información necesaria para que CLR ejecute el ensamblado se encuentra en el manifiesto del ensamblado. El manifiesto del ensamblado contiene una lista de los ensamblados dependientes. Por lo tanto, CLR puede mantener un conjunto coherente de ensamblados que se usan en la aplicación. En los archivos DLL de Win32, no se puede mantener la coherencia entre un conjunto de archivos DLL que se usan en una aplicación cuando se usan archivos DLL compartidos. Versionado En un manifiesto de ensamblado, CLR registra y aplica la información de versión. Además, las directivas de versión le permiten aplicar el uso específico de la versión. En los archivos DLL de Win32, el sistema operativo no puede aplicar el control de versiones. En su lugar, debe asegurarse de que los archivos DLL son compatibles con versiones anteriores. Despliegue en paralelo Los ensamblados admiten la implementación en paralelo. Una aplicación puede usar una versión de un ensamblado y otra aplicación puede usar una versión diferente de un ensamblado. A partir de Windows 2000, la implementación en paralelo se admite mediante la ubicación de archivos DLL en la carpeta de la aplicación. Además, Protección de archivos de Windows impide que los archivos DLL del sistema se sobrescriban o reemplacen por un agente no autorizado. Autocontención y aislamiento Una aplicación que se desarrolla mediante un ensamblado puede ser independiente y aislada de otras aplicaciones que se ejecutan en el equipo. Esta característica le ayuda a crear instalaciones de impacto cero. Ejecución Un ensamblado se ejecuta bajo los permisos de seguridad que se proporcionan en el manifiesto del ensamblado y que son controlados por CLR. Independiente del idioma Un ensamblado se puede desarrollar mediante cualquiera de los lenguajes .NET admitidos. Por ejemplo, puede desarrollar un ensamblado en Microsoft Visual C y, a continuación, usar el ensamblado en un proyecto de Microsoft Visual Basic .NET. Referencias Para obtener más información acerca de los archivos DLL y los ensamblados de .NET Framework, visite los siguientes sitios Web de Microsoft: Conflictos de DLLImplementación de uso compartido decomponentes enparalelo en aplicacionesCómo crear y dar servicio a aplicaciones aisladas y ensamblados en paralelo para Windows XPSimplificación de la implementación y resolución deconflictos de DLL con .NET FrameworkGuía del desarrollador de.NET Framework: EnsamblajesVinculación dinámicaen tiempo de ejecución almacenamiento local desubprocesos Seguramente hemos oído en más de una oportunidad hablar de los archivos DLL, que en general están relacionados con algunos inconvenientes en el rendimiento de nuestra computadora. Estos archivos DLL son fundamentales para el buen funcionamiento de las aplicaciones, ya que son parte de ellas, ya que contienen diversos elementos como gráficos, fuentes, comandos y demás. Como mencionamos, los archivos DLL están lamentablemente relacionados con errores en la PC, esto sucede debido a una mala ejecución de los mismos por descuido del programador o por mal diseño del programa que usa estas DLL. Esto provoca que una vez cerrada la aplicación que las utiliza, las DLL continúan residiendo en la memoria, lo que además de perjudicarnos en lo relativo al rendimiento de nuestra computadora, suscita problemas de compatibilidad. ¿Qué es un archivo DLL? Los archivos DLL, siglas por su nombre en inglés Dynamic Link Library, conocidos en español como Bibliotecas de Enlaces Dinámicos, consisten en una serie de archivos que constan de código ejecutable y demás partes de una app, los cuales hacen posible la utilización de las aplicaciones que tenemos instaladas en la PC. Cuando ordenemos a nuestro equipo a ejecutar un programa, sin que nosotros lo notemos, el sistema operativo carga automáticamente la librería DLL correspondientes para que la aplicación o función incluida de la app se ejecute. Si bien en general, los archivos DLL están relacionados con el sistema operativo Microsoft Windows, lo cierto es que todos los sistemas operativos utilizan este tipo de bibliotecas para la ejecución de las aplicaciones. Cabe destacar que más allá de que muchos usuarios se refieran a los DLL como archivos que ralentizan el funcionamiento de la PC, lo cierto es que son de gran utilidad, por lo que poseen una gran cantidad de ventajas para realizar las tareas habituales en el equipo, como podremos ver debajo de estas líneas. ¿Para qué sirven los archivos DLL? En principio, una de las más importantes ventajas que nos ofrecen los archivos DLL o librerías de enlace dinámico, es que gracias a su implementación se ha logrado reducir notablemente el tamaño de los archivos ejecutables de las aplicaciones, ya que una gran porción de los códigos ejecutables de los programas pueden ser almacenados en estos archivos DLL, como por ejemplo gráficos, audio, texto, tipografía y todos los demás elementos que utiliza la app, por lo que se obtiene una mayor organización de los procesos, que brinda como resultado un mejor rendimiento de la app, y por lo tanto del rendimiento general de la computadora. Sin embargo, los archivos DLL también ofrecen otras ventajas muy interesantes, más relacionadas con el rendimiento global de la PC, ya que por ejemplo, muchas veces la misma librería de enlace dinámica o DLL puede llegar a ser utilizada por diferentes programas, como es el caso de la denominada MFC, que suelen utilizar una gran cantidad de aplicaciones que corren en el sistema operativo Windows. También los archivos DLL permiten aumentar el aprovechamiento de la memoria y facilitan la gestión por intermedio de la aplicación de determinados algoritmos que ayudan a mejorar el rendimiento del sistema operativo y aumentar la velocidad durante la ejecución de las aplicaciones que utilizan las mismas bibliotecas DLL, ya que han sido cargadas con anterioridad. Los errores y los archivos DLL Como mencionamos al comienzo de este post, los archivos DLL están muy relacionados con errores en el sistema operativo como las temidas pantallas azules de la muerte, cuelgues del sistema, reinicios espontáneos y demás calamidades. Sin embargo lo cierto es que las bibliotecas DLL no son las culpables per se, sino que los desarrolladores de dichas DLL no se toman el trabajo de diseñarlas teniendo en cuenta todas las condiciones de hardware y software posibles, es decir que las prueban y utilizan en ámbitos en donde todo funciona a la perfección, pero luego en la PC del usuario, con su complejidad de apps y demás es otro el escenario. Las bibliotecas DLL han sido probadas a lo largo de los años, y han dado sobradas muestras de que se son una de las mejores herramientas que tiene el programador para desarrollar aplicaciones bien hechas, es decir que no utilicen ni más memoria RAM ni recursos del sistema de los estrictamente necesarios. Si el programador no cumple con estas premisas, lo más probable es que los archivos DLL que desarrolle tengan fallas y problemas de todo tipo, que se trasladaran inmediatamente al trabajo del usuario que utilice su programa. A pesar de todo ello, siempre es posible corregir y reescribir un archivo DLL para solucionar los problemas que los usuarios hayan reportado, de hecho es una de las formas más sencillas de conseguir esto es a través de las actualizaciones, en las que se introducen nuevos avances en las bibliotecas dinámicas, con lo que es posible corregir los errores reportados. Todo esto es gracias a la flexibilidad que caracteriza a los archivos DLL. Sin embargo, esta ventaja a veces puede llegar a provocar inconvenientes, originados en una posible incompatibilidad de los programas con las nuevas bibliotecas dinámicas actualizadas, que resultan en fallas que pueden llegar a impedir la ejecución de una aplicación. No obstante, estos inconvenientes son solucionados constantemente, para lo cual se suelen poner a disposición de los usuarios la descarga de los archivos DLL actualizados y compatibles. Instalar archivos DLL Si bien los escenarios en donde el usuario tenga que instalar un archivo DLL de forma manual son escasos, ya que su ejecución y utilización son transparentes y ocurren en segundo plano para el usuario, lo cierto es que puede ser necesario, sobre todo en apps que ya no tienen soporte por parte del desarrollador. Para instalar un archivo DLL en nuestra computadora fácil, lo único que tenemos que hacer es seguir los pasos que se detallan a continuación. Paso 1 Lo primero que tenemos que hacer para instalar una biblioteca DLL con éxito es conocer el nombre exacto del archivo DLL que necesitamos. Esto es normalmente sencillo, y será la app misma la que se encargue de pedirnos el archivo que le falta para funcionar normalmente. Otra forma de obtener el nombre del archivo DLL faltante es consultando en Google u otro motor de búsqueda. Una vez que lo encontramos, lo descargamos a nuestra computadora, siempre teniendo en cuenta la reputación del sitio desde donde vamos a hacerlo, por temas de seguridad. Una vez que lo tenemos lo anotamos en algún lado a la mano. Para los efectos prácticos de este tutorial, nuestra biblioteca DLL se llamará “bibliotecaDLL.dll”. Paso 2 Seguimos los pasos que nos indique el sitio para descargar el archivo DLL, y luego seleccionamos la ubicación, preferentemente de fácil acceso. Bajo ningún punto de vista debemos cambiar el nombre de la biblioteca DLL que acabamos de bajar. Si el archivo DLL viene comprimido en un archivo ZIP o RAR, deberemos descomprimirlo. Si no sabemos cómo hacerlo, podemos consultar este enlace, en donde encontraremos el procedimiento correcto e información más que interesante sobre este tema. Paso 3 Una vez descomprimido el archivo RAR o ZIP que contiene la biblioteca DLL, pulsamos con el botón derecho del ratón sobre el mismo y seleccionamos la opción, “Copiar”. Paso 4 Una vez hecho esto, nos desplazamos hasta la siguiente ubicación en el disco: “C: \Windows\system32”. Allí, en cualquier lugar despejado de la ventana, pulsamos con el botón derecho del ratón y seleccionamos la opción “Pegar”. Con esto acabamos de copiar el archivo DLL en la carpeta de registro de Windows. En el caso que Windows nos muestre una notificación al respecto de los permisos de copia, permitimos la acción. Paso 5 Ahora, nos desplazamos hasta el menú “Inicio”. Allí escribimos “regsvr32”, seguido del nombre del archivo DLL que queremos instalar. Es decir que para el ejemplo sería algo como esto: “regsvr32 C:\windows/system32/bibliotecaDLLdll”. Esto lo debemos escribir sin las comillas. Esta acción ejecutará el registro de Windows, tras lo cual se registrará el archivo DLL que acabamos de ingresar. Cabe destacar que este procedimiento es similar en cualquiera de las versiones de Windows. Abrir archivos DLL Antes de comenzar, debemos entender que intentar abrir un archivo DLL puede ser perjudicial para nuestro equipo, y hasta incluso podríamos llegar a dañarlo. En el mejor de los casos al intentar abrir un DLL con una herramienta como el bloc de notas de Windows, sólo obtendremos caracteres ilegibles. Paso 1 Lo primero que tenemos que hacer para abrir un archivo DLL es abrir una carpeta cualquier de Windows, y luego en su menú seleccionar la opción “Opciones de carpeta”, luego buscar la opción “Ver” y finalmente pulsar sobre “Mostrar archivos ocultos” y “Ocultar archivos protegidos del sistema”. Cuando finalicemos, pulsamos sobre el botón “Aceptar”. Paso 2 Luego de ello, pulsamos en “Inicio” y seleccionamos la opción “Buscar”. A continuación le indicamos al sistema que busque archivos “dll” en todo el sistema. En algunas versiones de Windows podemos hacer uso de la opción “Buscar en todos los archivos y carpetas”. Paso 3 Luego de este procedimiento, el sistema nos devolverá un listado con todas las bibliotecas DLL que encuentre. En este punto pulsamos sobre la biblioteca DLL que queremos abrir y seleccionamos la herramienta con la que deseamos hacerlo. Cómo ver y modificar archivos DLL En el caso que necesitemos editar un archivo DLL de forma más apropiada, y para eso necesitamos tener conocimientos de programación, entonces necesitaremos herramientas especializadas para abrir DLL, como por ejemplo dotPeek, además de Visual Basic y otras apps de desarrollo de software. Si quieres saber cómo modificar un archivo DLL, lo único que tienes que hacer es seguir las instrucciones que se detallan a continuación. Paso 1 Lo primero que tenemos que hacer es descompilar el archivo DLL que queremos editar. Para ello necesitamos un descargar e instalar un descompilador. Básicamente, un descompilador es una aplicación de programación que nos posibilita ver el código fuente de un programa. Cómo sabemos, el contenido de un archivo binario es imposible que lo podamos ver o consultar con herramientas como editores de texto como por ejemplo el Bloc de notas de Windows, es por ello que para poder ver el código fuente de una app o archivo DLL necesitamos un descompilador, cuya tarea principal es revertir el código binario a texto e instrucciones que se puedan leer. En este sentido, uno de los descompiladores más populares es dotPeek, el cual podemos descargar de forma gratuita pulsando sobre este enlace. También para este ejemplo usaremos esta aplicación. Paso 2 P=ara modificar un archivo DLL, tenemos que abrirlo en el descompilador. Para ello nos desplazamos hasta “File”, luego pulsamos sobre “Open” y finalmente navegamos hasta la ubicación del archivo DLL que queremos editar. En este punto cabe destacar que podemos ver los contenidos de un archivo DLL sin peligro alguno para el sistema. Paso 3 Una vez abierto el archivo DLL, podemos navegar por las diferentes categorías de objetos que incorpora el archivo DLL utilizando el explorador de compilación, lo que nos permitirá ver el contenido de los diferentes módulos de la biblioteca DLL. Para ver el contenido de los módulos del archivo DLL que queremos, podemos expandir cada nodo haciendo doble clic con el ratón sobre ellos, lo que también nos dará paso a los demás subnodos que el archivo DLL pueda contener. Paso 4 Cuando pulsamos sobre uno estos nodos, su código aparecerá en el panel ubicado a la derecha de la interfaz de dotPeek. En este punto, dotPeek muestra el código en C#. En el caso de desear ver el código del DLL en otros lenguajes, podemos descargar librerías adicionales para sumar estas opciones, o dejar que dotPeek descargue e instale estas librerías de forma automática. Paso 5 Por último, y con el objeto de modificar y compilar nuevamente el archivo DLL, exportamos el código a Visual Basic. Cabe destacar que el código exportado estará en lenguaje C#, aún si el código del archivo DLL estuviera escrito en otro lenguaje diferente. Paso 6 Para exportar el código del archivo DLL, nos desplazamos hasta el explorador de compilación, pulsamos sobre el nodo que queremos exportar y pulsamos sobre la opción “Export to Project” y seleccionamos las opciones de exportación pertinentes. Paso 7 Para finalizar, abrimos el código DLL en Visual Studio y lo editamos. Lo único que resta para crear nuestra propia DLL es compilarla e instalarla como vimos más arriba en este mismo post.