InicioInfoQue es un DLL?
______________________

Siempre quise hacer esto jojo

Que es un DLL?
______________________


Biblioteca de enlaces dinámicos



herramientas



Este artículo describe lo que es una biblioteca de vínculos dinámicos (DLL) y los distintos problemas que pueden producirse al utilizar archivos DLL.

A continuación, en este artículo se describe algunos temas avanzados que se deben considerar al desarrollar sus propios archivos DLL. Describir qué un archivo DLL es, este artículo describe métodos de vinculación dinámicos, las dependencias DLL, puntos de entrada DLL, exportar funciones DLL y herramientas para solucionar problemas de DLL.

En este artículo se termina con una comparación de alto nivel de archivos DLL a los ensamblados de Microsoft.NET Framework.



Microsoft



Para los sistemas operativos de Microsoft Windows que se enumeran en la sección "Se refiere a:", muchas de las funciones del sistema operativo proporciona bibliotecas de vínculos dinámicos (DLL). Además, al ejecutar un programa en uno de estos sistemas operativos Windows, muchas de las funciones del programa debe proporcionárselo archivos DLL. Por ejemplo, algunos programas pueden contener muchos módulos diferentes, y contienen cada módulo del programa y distribuye en archivos DLL.

El uso de archivos DLL ayuda a promover la organización en módulos de código, la reutilización de código, uso eficaz de la memoria y espacio en disco reducido. Por lo tanto, el sistema operativo y los programas se cargan más rápido, se ejecuten más rápidamente y tener menos espacio en disco en el equipo.

Cuando un programa utiliza un archivo DLL, un problema que se denomina dependencia puede provocar que el programa no ejecutar. Cuando un programa utiliza un archivo DLL, se crea una dependencia. Si otro programa se sobrescribe e interrumpe esta dependencia, no puede ejecutar correctamente el programa original.

Con la introducción de la.NET Framework de Microsoft, la mayoría de los problemas de dependencia han sido eliminados mediante el uso de ensamblados.



diagnostico


¿Qué es un archivo DLL?

Un archivo DLL es una biblioteca que contiene el código y datos que se pueden utilizar por más de un programa a la vez. Por ejemplo, en sistemas operativos Windows, la DLL archivo Comdlg32 realiza común funciones relacionadas con el cuadro de diálogo. Por lo tanto, cada programa puede utilizar la funcionalidad contenida en este archivo DLL para implementar un cuadro de diálogo Abrir . Esto ayuda a promover la reutilización de código y el uso eficaz de la memoria.

Mediante el uso de un archivo DLL, un programa puede ser modularizado en componentes separados. Por ejemplo, un programa de contabilidad podrá venderse por módulo. Cada módulo puede cargarse en el programa principal en tiempo de ejecución, si está instalado ese módulo. Dado que los módulos son independientes, el tiempo de carga del programa es más rápido y sólo 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 que un programa de nóminas y los tipos impositivos cambian cada año. Cuando estos cambios se aíslan a un archivo DLL, puede aplicar una actualización sin necesidad de generar o vuelva a instalar todo el programa.

La lista siguiente describe algunos de los archivos que se implementan como archivos DLL en sistemas operativos Windows:

dll Archivos de controles de ActiveX (.ocx)
Un ejemplo de un control de ActiveX es un control de calendario que le permite seleccionar una fecha en un calendario.

WindowsArchivos (.cpl) del Panel de control
Un ejemplo de un archivo .cpl es un elemento que se encuentra en el Panel de Control. Cada elemento es un archivo DLL especializado.

esArchivos (.drv) de controladores de dispositivo
Un ejemplo de un controlador de dispositivo es un controlador de impresora que controla la impresión a una impresora.


Ventajas DLL

La lista siguiente describe algunas de las ventajas que se proporcionan cuando un programa utiliza un archivo DLL:

QueUtiliza 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. En gran medida, esto puede influir en el rendimiento no sólo el programa que se ejecuta en primer plano, sino también otros programas que se ejecutan en el sistema operativo Windows.

libreria de vinculos dinamicosPromueve la arquitectura modular
Un archivo DLL ayuda a promover el desarrollo de programas modulares. Esto le ayudará a desarrollar programas grandes que requieren varias versiones de idioma o un programa que requiere la 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.

Que es un DLL?Instalación e implementación de las aceleraciones
Cuando una función dentro de un archivo DLL necesita una actualización o una solución, la implementación y la instalación de la DLL no requiere el programa para volver a vincular con el archivo DLL. Además, si varios programas utilizan la misma DLL, los programas múltiples se beneficiarán de la actualización o la revisión. Esto puede ocurrir con más frecuencia cuando se utiliza una DLL de terceros que se actualiza con regularidad o que se fija.



Dependencias 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 independiente y el programa puede tener problemas si la dependencia se rompe. Por ejemplo, el programa puede no funcionar si se produce una de las siguientes acciones:

herramientasUna DLL dependiente se actualiza a una nueva versión.

MicrosoftSe fija una DLL dependiente.

diagnosticoUna DLL dependiente se sobrescribe con una versión anterior.

dllUna DLL dependiente se quita del equipo.

Por lo general, estas acciones se denominan conflictos de DLL. Si no se exige la compatibilidad con versiones anteriores, el programa no puede ejecutar correctamente.

La lista siguiente describe los cambios que se han introducido en Microsoft Windows 2000 y posteriores sistemas operativos de Windows para ayudar a minimizar los problemas de dependencia:

WindowsProtección de archivos de Windows
En la protección de archivos de Windows, el sistema operativo impide las DLL de actualizados o eliminados por un agente no autorizado del sistema. Por lo tanto, cuando una instalación del programa intenta quitar o actualizar un archivo DLL que se define como una DLL del sistema, protección de archivos de Windows buscará una firma digital válida.

esArchivos DLL de privado
Let de archivos DLL de Private aislar un programa a partir de los cambios realizados en archivos DLL compartidos archivos DLL en privado se utilizan información específica de la versión o un archivo .local vacía para exigir la versión de la DLL que se utiliza el programa. Para utilizar archivos DLL privadas, busque los archivos DLL en la carpeta raíz. A continuación, para nuevos programas, agregar información específica de la versión al archivo DLL. Para los programas antiguos, utilice un archivo .local vacía. Cada método indica que el sistema operativo para utilizar los archivos DLL privados que se encuentran en la carpeta raíz.



Herramientas para solucionar problemas de DLL

Existen varias herramientas para ayudarle a solucionar problemas DLL. Las herramientas siguientes son algunas de estas herramientas.

Dependency Walker

La herramienta Dependency Walker puede recursivamente todos los archivos DLL dependientes que utiliza un programa. Cuando se abre un programa de Dependency Walker, Dependency Walker realiza las siguientes comprobaciones:

QueDependency Walker busca archivos DLL que faltan.

libreria de vinculos dinamicosDependency Walker comprueba si los archivos de programa o archivos DLL que no son válidas.

Que es un DLL?Dependency Walker comprueba que funciones de importar y exportar la coincidencia de funciones.

herramientasDependency Walker comprueba errores de dependencia circular.

MicrosoftDependency Walker busca módulos que no son válidos porque los módulos son para un sistema operativo diferente.


Al utilizar Dependency Walker, puede documentar todas las DLL que utiliza el programa. Esto puede ayudar a evitar y corregir los problemas DLL que pueden producirse en el futuro. Al instalar Microsoft Visual Studio 6.0, Dependency Walker se encuentra en el siguiente directorio:
driveArchivos de programaMicrosoft Visual StudioCommonTools

Solucionador de problemas DLL Universal

La herramienta Solver Universal problema de DLL (duplicados) se utiliza para auditar, comparar, documento y mostrar información de la DLL. La lista siguiente describe las utilidades que componen la herramienta de duplicados:

diagnosticoDlister.exe
Esta utilidad enumera todos los archivos DLL en el equipo y registra la información en un archivo de texto o a un archivo de base de datos.

dllDcomp.exe
Esta utilidad compara los archivos DLL que se enumeran en dos archivos de texto y produce un tercer archivo de texto que contiene las diferencias.

WindowsDtxt2DB.exe
Esta utilidad carga los archivos de texto que se crean mediante la utilidad Dlister.exe y la utilidad de Dcomp.exe en la base de datos de dllHell.

esDlgDtxt2DB.exe
Esta utilidad proporciona una versión de interfaz gráfica de usuario de la utilidad Dtxt2DB.exe.



Desarrollo de DLL

Esta sección describe los problemas y los requisitos que se deben considerar al desarrollar sus propios archivos DLL.

Tipos de archivos DLL

Cuando se carga una 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, proporcionan un archivo de encabezado (. h) y un archivo de biblioteca (.lib) de importación cuando se compila y vincular la aplicación. Al hacerlo, el vinculador proporcionará el sistema con la información que se necesita para cargar el archivo DLL y resolver las ubicaciones de función exportadas de DLL 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 la función LoadLibraryEx para cargar la DLL en tiempo de ejecución. Después de la DLL se carga correctamente, utilice la función GetProcAddress para obtener la dirección de la función exportada de DLL 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.

La lista siguiente describe los criterios de aplicación de vinculación dinámica en tiempo de carga de uso y cuándo se debe utilizar la vinculación dinámica en tiempo de ejecución:



QueRendimiento de inicio
Si el rendimiento de inicio de la aplicación es importante, debe utilizar la vinculación dinámica en tiempo de ejecución.

libreria de vinculos dinamicosFacilidad de uso
En la vinculación dinámica en tiempo de carga, las funciones DLL exportadas son como las funciones locales. Esto facilita la llamar a estas funciones.

Que es un DLL?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 al desarrollar las versiones de varios idiomas.


El punto de entrada DLL

Cuando se crea un archivo DLL, opcionalmente, puede especificar una función de punto de entrada. La función de punto de entrada se llama cuando procesos o subprocesos atacan a la DLL o desasociada a sí mismos de la DLL. Puede utilizar la función de punto de entrada para inicializar las estructuras de datos o destruir las estructuras de datos según lo requiera la DLL. Además, si la aplicación es multiproceso, puede utilizar almacenamiento local de subprocesos (TLS) para asignar la memoria que es privado para cada subproceso en función de punto de entrada. El código siguiente es un ejemplo de la función de punto de entrada DLL.


[color=#000000]
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;
}
[/color]


Cuando la función de punto de entrada, devuelve el valor FALSE , no se iniciará la aplicación si utiliza vinculación dinámica en tiempo de carga. Si utiliza vinculación dinámica en tiempo de ejecución, no se cargará el archivo DLL individual.

La función de punto de entrada sólo debe realizar las tareas de inicialización simple y no debe llamar a cualquier otra carga de DLL o las funciones de terminación. Por ejemplo, en función de punto de entrada, usted no debe directa o indirectamente llamar la función LoadLibrary o LoadLibraryEx . Además, no debe llamar la función FreeLibrary cuando el proceso está finalizando.

Nota En aplicaciones multiproceso, asegúrese de que el acceso a los datos globales de la DLL está sincronizado (seguro para subprocesos) para evitar la posible corrupción de datos. Para ello, utilice TLS para proporcionar datos únicos para cada subproceso.

Exportar funciones DLL

Para exportar funciones DLL, puede agregar una palabra clave de la función a las funciones DLL exportadas o crear un archivo de definición (.def) del módulo que se enumera las funciones DLL exportadas.

Para utilizar una palabra clave function, debe declarar cada función que va a exportar con la siguiente palabra clave:
__declspec (dllexport)

Para utilizar funciones DLL exportadas en la aplicación, debe declarar cada función que va a importar con la siguiente palabra clave:
__declspec (dllimport)

Normalmente, se utilizaría un archivo de encabezado que tiene una instrucción define y una instrucción ifdef para separar la declaración de exportación 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, declare la instrucción de biblioteca y la instrucción EXPORTS del archivo DLL. El código siguiente es un ejemplo de un archivo de definición.


[color=#000000]
// SampleDLL.def
//
LIBRARY "sampleDLL"

EXPORTS
  HelloWorld
[/color]


Ejemplo de archivo DLL y aplicación

En Microsoft Visual C++ 6.0, puede crear un archivo DLL seleccionando el tipo de proyecto de Biblioteca de vínculos dinámicos Win32 o el tipo de proyecto de MFC AppWizard (dll) ..

El código siguiente es un ejemplo de una DLL que se creó en Visual C++ con el tipo de proyecto de Biblioteca de vínculos dinámicos de Win32 . .


[color=#000000]
// 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);
}
[/color]



[color=#000000]
// 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
[/color]



El código siguiente es un ejemplo de un proyecto de Aplicación Win32 que llama a la función exportada del archivo DLL en el archivo DLL SampleDLL.

[color=#000000]
// SampleApp.cpp 
//

#include "stdafx.h"
#include "sampleDLL.h"

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{     
    HelloWorld();
    return 0;
}
[/color]



Nota En la vinculación dinámica en tiempo de carga, debe vincular la biblioteca de importación de SampleDLL.lib que se crea al generar el proyecto SampleDLL.

En la vinculación dinámica en tiempo de ejecución, se utiliza código similar al siguiente código para llamar a la SampleDLL.dll la función DLL exportada.


[color=#000000]
...
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);
}
...
[/color]


Al compilar y vincular la aplicación SampleDLL, el sistema operativo Windows busca el archivo DLL de SampleDLL en las ubicaciones siguientes en este orden:

1.- La carpeta de aplicación
2.- La carpeta actual
3.- La carpeta de sistema de Windows

Nota La función GetSystemDirectory devuelve la ruta de la carpeta de sistema de Windows.
4.- La carpeta de Windows

Nota La función GetWindowsDirectory devuelve la ruta de la carpeta de Windows.




El ensamblado.NET Framework

Con la introducción de Microsoft .net y el.NET Framework, la mayoría de los problemas asociados con las DLL ha sido eliminada mediante el uso de ensamblados. Un ensamblado es una unidad lógica de funcionalidad que se ejecuta bajo el control de .net common language runtime (CLR). Un ensamblado existe físicamente como un archivo .dll o como un archivo .exe. Sin embargo, internamente un ensamblado es muy diferente de una DLL de Win32 de Microsoft.

Un archivo de ensamblado contiene un manifiesto de ensamblado, metadatos de tipo, código de lenguaje intermedio (MSIL) de Microsoft y otros recursos. El manifiesto del ensamblado contiene los metadatos del ensamblado que proporciona toda la información necesaria para un ensamblado que se va a ser autodescriptivo. La siguiente información se incluye en el manifiesto del ensamblado:

herramientas Nombre del ensamblado
Microsoft Información de versión
diagnostico Información de referencia cultural
dll Información sobre nombre seguro
Windows La lista de ensamblados de archivos
es Información de referencia de tipo
Que Información de ensamblado que se hace referencia y dependientes

No se puede ejecutar directamente el código MSIL que se incluye en el ensamblado. En su lugar, la ejecución de código MSIL se administra a través de CLR. De forma predeterminada, cuando se crea un ensamblado, el ensamblado es privado para la aplicación. Para crear un ensamblado compartido requiere que asignar un nombre seguro al ensamblado y, a continuación, publicar el ensamblado en la caché de ensamblados global.

La lista siguiente describe algunas de las características de los ensamblados que se compara con las características de las DLL de Win32:

libreria de vinculos dinamicos Autodescriptivos
Cuando crea un ensamblado, toda la información necesaria para ejecutar el ensamblado CLR está contenida en el manifiesto del ensamblado. El manifiesto del ensamblado contiene una lista de los ensamblados dependientes. Por lo tanto, el CLR puede mantener un conjunto coherente de ensamblados que se utilizan en la aplicación. En las DLL de Win32, no se puede mantener la coherencia entre un conjunto de archivos DLL que se utilizan en una aplicación al utilizar archivos DLL compartidos.

Que es un DLL?Control de versiones
En un manifiesto de ensamblado la información de la versión se registra y se exige el CLR. Además, las directivas de versión permiten exige el uso específico de la versión. En las DLL de Win32, control de versiones no puede exigirse el sistema operativo. En su lugar, debe asegurarse de que los archivos DLL son compatibles con versiones anteriores.

herramientas Implementación de Side-by-side
Los ensamblados admiten la implementación de side-by-side. Una aplicación puede utilizar una versión de un ensamblado y otra aplicación puede utilizar una versión diferente de un ensamblado. A partir de Windows 2000, se admite la implementación de side-by-side localizando los archivos DLL en la carpeta de aplicación. Además, la protección de archivos de Windows impide las DLL que se sobrescriban o sustituido por un agente no autorizado del sistema.

Microsoft Aislamiento y traste
Una aplicación que se desarrolla utilizando un ensamblado puede ser independiente y aislado de otras aplicaciones que se ejecutan en el equipo. Esta característica le permite crear instalaciones de impacto cero.

diagnosticoEjecución
Un ensamblado se ejecuta bajo los permisos de seguridad que se suministran en el manifiesto del ensamblado y que están controlados por el CLR.

dllIndependiente del lenguaje
Un ensamblado se puede desarrollar con cualquiera de los lenguajes admitidos. Por ejemplo, puede desarrollar un ensamblado de Microsoft Visual C# y, a continuación, utilizar el ensamblado en un proyecto de Microsoft Visual Basic..



Windows


Que

Datos archivados del Taringa! original
639puntos
5,141visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
10visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

E
ELCRIS12🇦🇷
Usuario
Puntos0
Posts24
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.