Pregunta

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

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

¿Fue útil?

Solución

¿Qué es una DLL?

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

Las DLL se parecen tanto a un EXE que el formato del archivo en sí 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 utiliza un EXE u otra DLL.

Tipos de bibliotecas:

En prácticamente todos los sistemas operativos, existen 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ámicamente no se vinculan hasta el tiempo de ejecución.

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

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 compilada en el EXE.Una DLL se puede actualizar individualmente sin actualizar el EXE.

Cargando una DLL:

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

Otras lecturas:

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

Otros consejos

¿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 no se encuentra uno de estos archivos DLL en la cadena de dependencia, la aplicación no se cargará.Esto se depura fácilmente utilizando cualquier herramienta de análisis de dependencias, como Caminante de dependencia.

Hay tantos de ellos 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 mantiene por separado en diferentes archivos DLL para que solo se carguen los archivos DLL necesarios y así reducir las limitaciones de memoria en el sistema.

Las aplicaciones instaladas también utilizan archivos DLL

Los archivos DLL también se convierten en una forma de separar físicamente funcionalidades 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 muchos archivos DLL.

DLL infierno

Sin embargo, a veces las actualizaciones del sistema a menudo dañan otros programas cuando hay una discrepancia 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 solucionar este problema.Es posible que la plataforma .NET no enfrente este problema en absoluto.

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

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

¿Cómo los creamos/usamos?

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

Digamos que está creando un ejecutable que utiliza algunas funciones que se encuentran en una biblioteca.

Si la biblioteca que estás utilizando es estático, el vinculador copiará el código objeto de estas funciones directamente desde la biblioteca y los insertará en el ejecutable.

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

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

Ahora, si se ejecuta este ejecutable, faltan partes del ejecutable (es decir, los resguardos), por lo que el cargador revisa el ejecutable reparando los resguardos que faltan.Sólo después de que se hayan resuelto todos los resguardos se permitirá la ejecución del 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, el cargador ejecutable realiza partes del proceso de vinculación de forma dinámica en tiempo de ejecución.

Una nota final: si no vincula la DLL, el vinculador no insertará ningún código auxiliar, pero Windows aún proporciona la Obtener dirección Proc API que le permite cargar y ejecutar el punto de entrada de la función DLL mucho después de que se haya iniciado el ejecutable.

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

Las bibliotecas estáticas se insertan en un ejecutable en tiempo de compilación y se reparan 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, por lo que pueden actualizarse independientemente del ejecutable (todas esas elegantes ventanas y cuadros de diálogo que ve en Windows provienen de archivos DLL, por lo que la apariencia de su aplicación puede cambiar sin usted). tener que reescribirlo).

2/ Debido a que son independientes, el código se puede compartir entre varios ejecutables; esto ahorra memoria ya que, si ejecuta 100 aplicaciones con una sola DLL, es posible que solo haya una copia de la DLL en la memoria.

Su principal desventaja es la ventaja número 1: hacer que las DLL cambien independientemente de su aplicación puede hacer que ésta deje de funcionar o comience a comportarse de manera extraña.El control de versiones de DLL no suele gestionarse muy bien en Windows y esto lleva al curioso nombre "DLL Hell".

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

Con esta información, el programa que realiza la llamada puede llamar las funciones dentro de la DLL aunque no tuviera acceso a la DLL en el momento de la compilación.

Presentación de bibliotecas de vínculos dinámicos tiene algo más de información.

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 de Windows, el COMDLG32 DLL realiza funciones relacionadas con el cuadro de diálogo comunes.Por lo tanto, cada programa puede usar la funcionalidad contenida en esta DLL para implementar un cuadro de diálogo abierto.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 se puede cargar en el programa principal en el momento de ejecución si se instala ese módulo.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 a una DLL, puede aplicar una actualización sin necesidad de construir o instalar todo el programa nuevamente.

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

DLL es una extensión de archivo y formato de archivo conocido como "biblioteca de vínculos dinámicos" que se utiliza para almacenar múltiples códigos y procedimientos para programas de Windows.El software y los juegos se ejecutan sobre la base de archivos DLL;Los archivos DLL se crearon para que múltiples aplicaciones pudieran usar su información al mismo tiempo.

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

Las DLL (bibliotecas de enlaces dinámicos) contienen recursos utilizados por una o más aplicaciones o servicios.Pueden contener clases, iconos, cadenas, objetos, interfaces y prácticamente cualquier cosa que un desarrollador necesite almacenar excepto una interfaz de usuario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top