¿Qué es un archivo DLL?
Un archivo DLL es un archivo de biblioteca de enlaces dinámicos. Es un archivo ejecutable que permite a un programa compartir el código y otros recursos necesarios para realizar tareas especiales.
Aplicaciones relativamente grandes. Compuesto por muchos módulos, que completan funciones relativamente independientes y cooperan entre sí para completar el trabajo de todo el sistema de software. Puede haber algunos módulos cuyas funciones sean más generales y aún se utilizarán al construir otros sistemas de software. Al construir un sistema de software, si el código fuente de todos los módulos se compila estáticamente en el archivo EXE completo de la aplicación, surgirán algunos problemas: una desventaja es que aumenta el tamaño de la aplicación, lo que ocupa más espacio en el disco y el programa se ejecuta. También consumirá una gran cantidad de espacio de memoria, lo que provocará un desperdicio de recursos del sistema. Otra desventaja es que al escribir un programa EXE grande, todos los códigos fuente deben ajustarse y compilarse cada vez que se modifica y reconstruye, lo que aumenta la complejidad de; el proceso de compilación, que tampoco es propicio para pruebas unitarias por etapas.
La plataforma del sistema Windows proporciona un entorno de programación y ejecución completamente diferente y más efectivo. Puede crear módulos de programa independientes como archivos DLL (Biblioteca dinámica enlazable) más pequeños y controlarlos y probarlos individualmente. En tiempo de ejecución, el sistema cargará estos módulos DLL en el espacio de la memoria solo si el programa EXE realmente quiere llamarlos. Este enfoque no sólo reduce el tamaño del archivo EXE y los requisitos de espacio de memoria, sino que también permite que múltiples aplicaciones utilicen estos módulos DLL al mismo tiempo. El propio Windows implementa algunas funciones importantes del sistema en forma de módulos DLL.
En términos generales, una DLL es un archivo de disco. Los archivos del sistema con .dll, .DRV, .FON, .SYS y muchas extensiones .EXE pueden ser DLL. Consiste en datos globales, funciones de servicio y recursos. El sistema lo carga en el espacio virtual del proceso de llamada en tiempo de ejecución y se convierte en parte del proceso de llamada. Si no hay conflictos con otras DLL, el archivo generalmente se asigna a la misma dirección en el espacio virtual del proceso. El módulo DLL contiene varias funciones exportadas para brindar servicios al mundo exterior. Una DLL puede tener su propio segmento de datos, pero no tiene su propia pila y utiliza el mismo modo de pila que la aplicación que la llama; una DLL tiene solo una instancia en la memoria; la DLL implementa la encapsulación de código; DLL está relacionado con el lenguaje de programación específico. No tiene nada que ver con el compilador.
En un entorno Win32, cada proceso copia sus propias variables globales de lectura/escritura. Si desea compartir memoria con otros procesos, debe utilizar un archivo asignado en memoria o declarar un segmento de datos compartido. La memoria de pila requerida por los módulos DLL se asigna desde la pila del proceso en ejecución. Windows compara las llamadas a funciones de proceso con las funciones exportadas del archivo DLL cuando carga un módulo DLL. La operación del sistema operativo Windows en la DLL es solo asignar la DLL al espacio de direcciones virtuales del proceso que la necesita. Cualquier objeto (incluidas las variables) creado por código dentro de una función DLL es propiedad del hilo o proceso que lo llama.
Método de llamada:
1. Método de llamada estática: el sistema de compilación completa la carga de la DLL y la codificación de la descarga de la DLL cuando finaliza la aplicación (si otros programas usan la DLL). Luego, Windows reduce el registro de aplicación de la DLL en 1 y no lo libera hasta que todos los programas relacionados hayan terminado de usar la DLL. Es simple y práctico, pero no lo suficientemente flexible y solo puede cumplir con los requisitos generales.
Llamada implícita: el archivo .LIB generado al generar la biblioteca de enlaces dinámicos debe agregarse al proyecto de la aplicación. Cuando desee utilizar las funciones en la DLL, solo necesita explicar que las llamadas implícitas no requieren llamada. LoadLibrary() y FreeLibrary() Al crear un archivo DLL, el vinculador generará automáticamente un archivo de importación LIB correspondiente.
Este archivo contiene el nombre simbólico y el número de identificación opcional de cada función exportada por la DLL, pero no contiene el código real. Los archivos LIB se compilan en el proyecto de la aplicación como archivos de reemplazo para la DLL.
Cuando los programadores compilan y generan aplicaciones a través de enlaces estáticos, las funciones de llamada en la aplicación coinciden con los símbolos exportados en el archivo LIB, y estos símbolos o números de identificación ingresan al archivo EXE generado. El archivo LIB también contiene el nombre del archivo DL L correspondiente (pero no el nombre de la ruta completa), que el vinculador almacena dentro del archivo EXE.
Cuando una aplicación necesita cargar un archivo DLL durante la ejecución, Windows descubre y carga la DLL en función de esta información y luego vincula dinámicamente la función DLL a través del nombre del símbolo o el número de identificación. Todos los archivos DLL llamados por la aplicación se cargarán en la memoria cuando se cargue el archivo EXE de la aplicación. El programa ejecutable se vincula a un archivo de biblioteca de entrada (archivo .LIB) que contiene información sobre las funciones exportadas de la DLL. El sistema operativo carga la DLL cuando carga el programa ejecutable. El programa ejecutable llama directamente a la función de salida de la DLL a través del nombre de la función. El método de llamada es el mismo que el de otras funciones dentro del programa.
2. Método de llamada dinámica: el programador utiliza funciones API para cargar y descargar la DLL para lograr el propósito de llamar a la DLL. Es más complicado de usar, pero puede usar la memoria de manera más efectiva. la mejor opción al compilar aplicaciones a gran escala.
Llamada explícita:
Se refiere al uso de LoadLibrary o AfxLoadLibrary proporcionado por MFC en la aplicación para llamar explícitamente a la biblioteca de enlaces dinámicos que ha creado. El nombre del archivo es el parámetro del. Las dos funciones anteriores y luego use GetProcAddress() para obtener la función que desea introducir. De ahora en adelante, puede llamar a esta función importada como una función personalizada en esta aplicación. Antes de que se cierre la aplicación, se debe liberar la biblioteca de vínculos dinámicos utilizando FreeLibrary o AfxFreeLibrary proporcionado por MFC. Llame a la función Win32 LoadLibary directamente y especifique la ruta a la DLL como parámetro. LoadLibary devuelve el parámetro HINSTANCE que utiliza la aplicación al llamar a la función GetProcAddress. La función GetProcAddress convierte un nombre simbólico o número de identificación en una dirección dentro de la DLL. El programador puede decidir cuándo se carga o no un archivo DLL; el enlace explícito determina qué archivo DLL se carga en tiempo de ejecución. Los programas que usan DLL deben cargarse (LoadLibrary) antes de su uso para cargar la DLL para obtener un identificador del módulo DLL y luego llamar a la función GetProcAddress para obtener el puntero de la función de salida. La DLL debe descargarse (FreeLibrary) antes de salir.
Debido a que las DLL ocupan poca memoria y son fáciles de editar, muchos virus informáticos son archivos en formato DLL.
Las bibliotecas de enlaces dinámicos generalmente no se pueden ejecutar directamente y no pueden recibir mensajes. Son archivos independientes que contienen funciones que pueden ser invocadas por un programa ejecutable u otra DLL para completar un determinado trabajo. Solo funciona cuando otros módulos llaman a funciones en la biblioteca de enlaces dinámicos.
AaBbCc Tiempo de respuesta 2008-05-20 10:08
Informe
La biblioteca de enlaces dinámicos del sistema operativo Windows, que encapsula las funciones y controladores necesarios. por el programa, debe ser llamado por su propio programa principal. No es necesario abrirlo y no se puede abrir. El archivo puede dañarse después de haber sido abierto por un programa incorrecto. Es posible que el programa no se pueda ejecutar. ¡Se recomienda no tocar este archivo!