tutorial para windows winapi dll

windows - para - ¿Qué son exactamente los archivos DLL y cómo funcionan?



winapi c++ tutorial (9)

¿Cómo funcionan exactamente los archivos DLL? Parece que hay una gran cantidad de ellos, pero no sé qué son ni cómo funcionan.

Entonces, ¿cuál es el trato con ellos?


DLL es una extensión de archivo y conocida como el formato de archivo "biblioteca de vínculos dinámicos" que se utiliza para almacenar códigos y procedimientos múltiples para programas de Windows. Software & Games se ejecuta sobre la base de archivos DLL; Los archivos DLL se crearon para que varias aplicaciones pudieran usar su información al mismo tiempo.

SI desea obtener más información acerca de los archivos DLL o enfrentar cualquier error, lea la siguiente publicación. https://www.bouncegeek.com/fix-dll-errors-windows-586985/


Las DLL (bibliotecas de enlace dinámico) contienen recursos utilizados por una o más aplicaciones o servicios. Pueden contener clases, iconos, cadenas, objetos, interfaces y casi cualquier cosa que un desarrollador necesite almacenar excepto una IU.


Las DLL (bibliotecas de vínculos dinámicos) y las SL (bibliotecas compartidas, equivalentes en UNIX) son solo bibliotecas de código ejecutable que se pueden vincular dinámicamente en un archivo ejecutable en el momento de la carga.

Las bibliotecas estáticas se insertan en un ejecutable en tiempo de compilación y se arreglan desde ese punto. Aumentan el tamaño del ejecutable y no se pueden compartir.

Las bibliotecas dinámicas tienen las siguientes ventajas:

1 / Se cargan en tiempo de ejecución en lugar de en tiempo de compilación para que puedan actualizarse independientemente del ejecutable (todas esas ventanas y cuadros de diálogo de lujo que aparecen en Windows provienen de DLL para que la apariencia de su aplicación pueda cambiar sin usted tener que reescribirlo).

2 / Debido a que son independientes, el código se puede compartir en varios ejecutables; esto ahorra memoria ya que, si está ejecutando 100 aplicaciones con una sola DLL, solo puede haber una copia de la DLL en la memoria.

Su principal desventaja es la ventaja n. ° 1: si las DLL cambian independientemente, su aplicación puede hacer que la aplicación deje de funcionar o comience a comportarse de forma extraña. El control de versiones de DLL no se maneja muy bien en Windows y esto lleva a la extrañamente llamada "DLL Hell".


Los archivos DLL contienen una tabla de exportación que es una lista de símbolos que el programa llamante puede buscar. Los símbolos son típicamente funciones con la convención de llamadas C ( __stcall ). La tabla de exportación también contiene la dirección de la función.

Con esta información, el programa de llamada puede llamar a las funciones dentro de la DLL aunque no haya tenido acceso a la DLL en tiempo de compilación.

Al presentar Dynamic Link Libraries, tiene más información.


Supongamos que está creando un archivo ejecutable que usa algunas funciones encontradas en una biblioteca.

Si la biblioteca que está utilizando es estática , el enlazador copiará el código del objeto para estas funciones directamente de la biblioteca y las insertará en el ejecutable.

Ahora, si se ejecuta este ejecutable, tiene todo lo que necesita, por lo que el cargador ejecutable solo lo carga en la memoria y lo ejecuta.

Si la biblioteca es dinámica, el vinculador no insertará el código del objeto, sino que insertará un apéndice que básicamente dice que esta función se encuentra en esta DLL en esta ubicación.

Ahora bien, si se ejecuta este ejecutable, faltan bits del ejecutable (es decir, los stubs), por lo que el cargador pasa por el ejecutable arreglando los stubs que faltan. Solo después de que se hayan resuelto todos los resguardos se permitirá ejecutar el ejecutable.

Para ver esto en acción, elimine o cambie el nombre de la DLL y observe cómo el cargador informará un error de DLL faltante cuando intente ejecutar el ejecutable.

De ahí el nombre Biblioteca de enlaces dinámicos , partes del proceso de enlace se está realizando de forma dinámica en tiempo de ejecución por el cargador ejecutable.

Una nota final: si no enlaza con el DLL, el enlazador no insertará ningún stubs, pero Windows aún proporciona la API GetProcAddress que le permite cargar y ejecutar el punto de entrada de la función DLL mucho después de que el ejecutable haya comenzado.


Un archivo DLL, abreviatura de Dynamic Link Library, es un tipo de archivo que contiene instrucciones que otros programas pueden invocar para hacer ciertas cosas. De esta forma, múltiples programas pueden compartir las capacidades programadas en un solo archivo, e incluso hacerlo simultáneamente.

Por ejemplo, varios programas diferentes podrían recurrir al archivo veryuseful.dll (lo inventé, por supuesto) para encontrar el espacio libre en un disco duro, localizar un archivo en un directorio particular e imprimir una página de prueba al valor predeterminado impresora.

donde como Exe es EXE es una extensión de archivo para un formato de archivo ejecutable. Un ejecutable es un archivo que contiene un programa, es decir, un tipo particular de archivo que puede ejecutarse o ejecutarse como un programa en la computadora. Un archivo ejecutable puede ser ejecutado por un programa en Microsoft DOS o Windows a través de un comando o un doble clic.

COM y BAT son otros tipos de tipos de archivos ejecutables en Windows.

Un archivo cuyo nombre termina en ".exe" es realmente un programa que cuando se abre hace que el sistema operativo ejecute el programa. Los usuarios que reciben un archivo .exe como archivo adjunto de correo electrónico siempre deben asegurarse de que el archivo proviene de una fuente confiable y no contiene un virus.


http://support.microsoft.com/kb/815065

Una 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, la DLL Comdlg32 realiza funciones relacionadas con cuadros de diálogo comunes. Por lo tanto, cada programa puede usar la funcionalidad que está contenida en esta 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.

Al usar una DLL, un programa puede modularizarse en componentes separados. Por ejemplo, un programa de contabilidad puede venderse por módulo. Cada módulo puede cargarse en el programa principal en tiempo de ejecución si ese módulo está instalado. Debido a que los módulos están separados, el tiempo de carga del programa es más rápido, y un módulo solo se carga cuando se solicita esa funcionalidad.

Además, las actualizaciones son más fáciles de aplicar a cada módulo sin afectar otras partes del programa. Por ejemplo, puede tener un programa de nómina y las tasas impositivas cambian cada año. Cuando estos cambios están aislados en una DLL, puede aplicar una actualización sin necesidad de construir o instalar todo el programa nuevamente.

Wikipedia


¿Qué es una DLL?

Las bibliotecas de vínculos dinámicos (DLL) son como EXEs, pero no son directamente ejecutables. Son similares a los archivos .so en Linux / Unix. Es decir, las DLL son la implementación de MS de bibliotecas compartidas.

Las DLL son tan parecidas a un EXE que el formato del archivo es el mismo. Tanto EXE como DLL se basan en el formato de archivo Portable Executable (PE). Las DLL también pueden contener componentes COM y bibliotecas .NET.

¿Qué contiene una DLL?

Una DLL contiene funciones, clases, variables, UI y recursos (como iconos, imágenes, archivos, ...) que usa un EXE u otra DLL.

Tipos de bibliotecas:

En prácticamente todos los sistemas operativos, hay 2 tipos de bibliotecas. Bibliotecas estáticas y bibliotecas dinámicas. En Windows, las extensiones de archivo son las siguientes: bibliotecas estáticas (.lib) y bibliotecas dinámicas (.dll). La principal diferencia es que las bibliotecas estáticas están vinculadas al ejecutable en tiempo de compilación; mientras que las bibliotecas vinculadas dinámicas no están vinculadas hasta el tiempo de ejecución.

Más sobre bibliotecas estáticas y dinámicas:

Aunque normalmente no ve bibliotecas estáticas en su computadora, porque una biblioteca estática está integrada directamente dentro de un módulo (EXE o DLL). Una biblioteca dinámica es un archivo independiente.

Una DLL se puede cambiar en cualquier momento y solo se carga en tiempo de ejecución cuando un EXE carga explícitamente la DLL. Una biblioteca estática no se puede cambiar una vez que se compila dentro del EXE. Una DLL puede actualizarse individualmente sin actualizar el EXE.

Cargando una DLL:

Un programa carga una DLL al inicio, a través de la LoadLibrary API Win32, o cuando es una dependencia de otra DLL. Un programa usa GetProcAddress para cargar una función o LoadResource para cargar un recurso.

Otras lecturas:

Por favor, consulte MSDN o Wikipedia para leer más. También las fuentes de esta respuesta.


¿Qué es una DLL?

Los archivos DLL son archivos binarios que pueden contener código ejecutable y recursos como imágenes, etc. A diferencia de las aplicaciones, estas no se pueden ejecutar directamente, pero una aplicación las cargará cuando sea necesario (o todas a la vez durante el inicio).

¿Son importantes?

La mayoría de las aplicaciones cargarán los archivos DLL que requieren al inicio. Si no se encuentra alguno de estos, el sistema no podrá iniciar el proceso en absoluto.

Los archivos DLL pueden requerir otros archivos DLL

De la misma manera 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 depura fácilmente usando cualquier herramienta de walker de dependencia, como Dependency Walker .

Hay tantos en las carpetas del sistema

La mayor parte de la funcionalidad del sistema está expuesta a un programa de usuario en forma de archivos DLL, ya que son una forma estándar de compartir código / recursos. Cada funcionalidad se guarda por separado en diferentes archivos DLL para que solo se carguen los archivos DLL necesarios y, por lo tanto, reduzcan las limitaciones de memoria en el sistema.

Las aplicaciones instaladas también usan archivos DLL

Los archivos DLL también se convierten en una forma de separar funcionalidades físicamente como se explicó anteriormente. Las buenas aplicaciones también intentan no cargar los archivos DLL hasta que sean absolutamente necesarios, lo que reduce los requisitos de memoria. Esto también hace que las aplicaciones se envíen con una gran cantidad de archivos DLL.

DLL Hell

Sin embargo, a veces las actualizaciones del sistema a menudo interrumpen otros programas cuando hay una falta de coincidencia de versión entre los archivos DLL compartidos y el programa que los requiere. Puntos de control del sistema y caché de DLL, etc. han sido las iniciativas de M $ para resolver este problema. La plataforma .NET podría no enfrentar este problema en absoluto.

¿Cómo sabemos qué hay dentro de un archivo DLL?

DUMPBIN usar una herramienta externa como DUMPBIN o Dependency Walker que no solo mostrará qué funciones públicamente visibles (conocidas como exportaciones) están contenidas dentro de los archivos DLL y también qué otros archivos DLL requiere y qué exporta de esos archivos DLL este archivo DLL depende de.

¿Cómo los creamos / usamos?

Consulte la documentación de programación de su proveedor. Para C ++, consulte LoadLibrary en MSDN.