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

¿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?

¿Qué es una DLL?

Las bibliotecas de vínculos dynamics (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 icons, 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 comstackció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 comstack dentro del EXE. Una DLL puede actualizarse individualmente sin actualizar el EXE.

Cargando una DLL:

Un progtwig carga una DLL al inicio, a través de la LoadLibrary API Win32, o cuando es una dependencia de otra DLL. Un progtwig 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 fonts 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 progtwig 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 progtwigs cuando hay una falta de coincidencia de versión entre los archivos DLL compartidos y el progtwig 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?

Debe 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 progtwigción de su proveedor. Para C ++, consulte LoadLibrary en MSDN.

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 dynamics , 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.

Los archivos DLL contienen una tabla de exportación que es una lista de símbolos que el progtwig 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 progtwig de llamada puede llamar a las funciones dentro de la DLL aunque no haya tenido acceso a la DLL en tiempo de comstackción.

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

Las DLL (bibliotecas de vínculos dynamics) 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 comstackció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 comstackció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”.

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 progtwig 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 progtwig 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 progtwig puede modularizarse en componentes separados. Por ejemplo, un progtwig de contabilidad puede venderse por módulo. Cada módulo puede cargarse en el progtwig 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 progtwig 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 progtwig. Por ejemplo, puede tener un progtwig 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 progtwig nuevamente.

http://en.wikipedia.org/wiki/Dynamic-link_library

DLL es una extensión de archivo y conocida como el formato de archivo “biblioteca de vínculos dynamics” que se utiliza para almacenar códigos y procedimientos múltiples para progtwigs 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 dynamic) contienen recursos utilizados por una o más aplicaciones o servicios. Pueden contener clases, icons, cadenas, objetos, interfaces y casi cualquier cosa que un desarrollador necesite almacenar excepto una IU.