¿Qué es un archivo DLL público de shell de Windows? 100 puntos por ayuda!!!!
Es relativamente grande. Todas las aplicaciones se componen de varias. Módulos, que completan funciones relativamente independientes. Cooperan entre sí para completar el trabajo de todo el sistema de software. Juntos completan el trabajo de todo el sistema de software. Es posible que haya algunos módulos que tengan funciones más generales y que aún se utilicen al crear 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 de toda la aplicación, surgirán algunos problemas: una desventaja es que aumenta el tamaño de la aplicación y ocupa más espacio en el disco. ocupa una gran cantidad de espacio de memoria, lo que provoca 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 desperdicia recursos del sistema; que al escribir programas EXE grandes, todo el código fuente debe ajustarse y compilarse cada vez que se reconstruye. Otra desventaja es que al escribir programas EXE grandes, todo el código fuente debe ajustarse y compilarse para cada modificación y reconstrucción, lo que aumenta la complejidad del proceso de compilación y no favorece las pruebas unitarias por etapas.
La plataforma Windows proporciona un entorno de programación y tiempo de ejecución completamente diferente y más eficiente. Puede crear módulos de programa independientes como archivos DLL más pequeños y compilarlos y probarlos por separado. En tiempo de ejecución, estos módulos DLL se cargan en la memoria sólo cuando el programa EXE realmente los llama. Este enfoque no solo reduce el tamaño del archivo EXE y sus requisitos de memoria, sino que también permite que varias aplicaciones utilicen módulos DLL simultáneamente. 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, que puede ser .dll, .DRV, .FON, .SYS o cualquier archivo de sistema con extensión .EXE. Consta de 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. Los módulos DLL contienen varias funciones exportadas que brindan servicios al mundo exterior. Una DLL puede tener su propio segmento de datos, pero no tiene su propia pila. Utiliza el mismo modelo de pila que la aplicación que la llama; la DLL implementa la encapsulación del código; DLL no es independiente del lenguaje de programación específico y del impacto del 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 un módulo DLL se asigna desde la pila del proceso en ejecución. Cuando Windows carga un módulo DLL, hace coincidir las llamadas a funciones de proceso con las funciones exportadas del archivo DLL.
El sistema operativo Windows opera una DLL solo asignando la DLL al archivo que la requiere.
El sistema operativo Windows opera en una DLL simplemente mapeándola en el espacio de direcciones virtuales del proceso que la necesita.
Modo de llamada:
1. Modo de llamada estática: descargue el código después de que el sistema de compilación complete la carga de la DLL y finalice la aplicación de la DLL (si otros programas usan la DLL, 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 de la DLL. Sencillo y práctico, pero no lo suficientemente flexible y sólo puede cumplir con requisitos generales.
Llamada implícita: el archivo .LIB generado al crear la biblioteca de enlaces dinámicos debe agregarse al proyecto de la aplicación. Si desea utilizar la función en la DLL, solo necesita especificarla. Las llamadas implícitas no requieren llamadas a LoadLibrary() y FreeLibrary().
Cuando un programador crea un archivo DLL, el vinculador genera automáticamente el archivo de importación LIB correspondiente. Este archivo contiene el nombre simbólico y el identificador opcional de la función exportada de cada DLL, pero no contiene el código real.
Cuando un programador compila una aplicación generada 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 identificadores van al archivo EXE generado.
Cuando una aplicación necesita cargar un archivo DLL durante la operación, Windows descubrirá y cargará la DLL en función de esta información, y luego se vinculará dinámicamente a 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 cargan en la memoria cuando se carga 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 de salida de la DLL. El sistema operativo carga la DLL cuando carga el programa ejecutable, y el programa ejecutable llama directamente a la función de salida de la DLL a través del nombre de la función de la misma manera que otras funciones del programa.
2. Llamadas dinámicas: los programadores usan funciones API para cargar y descargar DLL para lograr el propósito de llamar a DLL. Es más complicado de usar, pero puede usar la memoria de manera más efectiva. escribir aplicaciones grandes.
Llamada explícita:
Es decir, utilice LoadLibrary o AfxLoadLibrary proporcionado por MFC en la aplicación para llamar explícitamente a la DLL producida. El nombre de archivo de la DLL es el parámetro anterior. dos funciones. y luego use GetProcAddress() para introducir la función. De ahora en adelante, puede llamar a funciones importadas como funciones definidas por la aplicación. Antes de salir de la aplicación, debe utilizar la biblioteca de versión FreeLibrary o AfxFreeLibrary proporcionada por MFC. Llame directamente a la función LoadLibary de Win32, especificando la ruta a la DLL como parámetro. LoadLibary devuelve el parámetro HINSTANCE que utiliza una aplicación cuando llama a la función GetProcAddress, que convierte un nombre de símbolo o identificador en una dirección dentro de la DLL. El programador decide cuándo se carga un archivo DLL y el enlace explícito determina qué archivo DLL se carga en tiempo de ejecución. Los programas que usan una DLL deben cargar la DLL (LoadLibrary) antes de usarla para obtener un identificador del módulo DLL, luego llamar a la función GetProcAddress para obtener un puntero a la función de salida y deben descargar la DLL (FreeLibrary) antes de salir.
Debido a que DLL tiene las características de memoria pequeña y fácil edición, muchos virus informáticos son archivos en formato DLL. Sin embargo, no pueden operar de forma independiente.
Las bibliotecas de enlaces dinámicos generalmente no pueden ejecutarse directamente y no pueden recibir información. Son archivos independientes que contienen funciones que pueden ser invocadas por un programa ejecutable u otra DLL para realizar un trabajo específico. Las bibliotecas de enlaces dinámicos solo son útiles cuando otros módulos llaman a funciones en la biblioteca de enlaces dinámicos.