¿Qué es un dll?

90

Esta puede ser una pregunta muy novato, pero en el mundo actual del desarrollo de aplicaciones web, muchos programadores no necesitan lidiar mucho con dll y, por lo tanto, no se molestan en aprender sobre su propósito.

Entonces, ¿qué es un dll?

  1. ¿Para qué se usa esto?
  2. ¿Como funciona?
  3. ¿Cómo se crea uno?
  4. ¿En qué situaciones es apropiado crear uno?

Me han dicho que los dll se utilizan para almacenar bibliotecas de funciones, pero más allá de eso, no sé mucho. Espero que alguien aquí pueda aclararme para que finalmente pueda dejar de preguntarme qué están haciendo todos esos archivos .dll en mi directorio de Windows.

Daniel
fuente
El wiki de la comunidad debe usarse para los casos en los que no haya respuestas reales a su pregunta. Esta es una pregunta válida y, al seleccionar el modo wiki de la comunidad, evita que usted y los respondedores ganen reputación en esta pregunta.
Cody Brocious
esta pregunta tiene el potencial de convertirse en una muy popular
Tamas Czinege
1
¿Crees? Quizás por vistas pero no probablemente por votos ... De todos modos ya ha sido respondido 4 veces.
Omar Kooheji
2
esto es trivialmente googleable ...
Annakata
3
Sí, esto se puede buscar en Google, pero realmente no he encontrado muchas buenas explicaciones concisas, especialmente para la cuestión de crear uno y cuándo es apropiado usar uno.
Daniel

Respuestas:

55

Una DLL es una biblioteca de enlaces dinámicos. Es una colección de código y / o datos, que pueden ser utilizados por varias aplicaciones (u otras bibliotecas / módulos).

Por ejemplo, los métodos comunes para procesar archivos, trabajar con componentes de GUI, etc. están disponibles en bibliotecas, por lo que varias aplicaciones pueden usar la misma funcionalidad. Esto no solo reduce la necesidad de crear el mismo material varias veces, sino que también asegura que, por ejemplo, los diálogos comunes sean los mismos entre aplicaciones.

Las bibliotecas pueden cargarse en tiempo de ejecución y, por lo tanto, compartirse entre diferentes aplicaciones simultáneas. Esto se llama enlace dinámico.

En algunos casos, la biblioteca se puede incluir dentro de la propia aplicación. Esto se conoce como enlace estático. La vinculación estática facilita la implementación a costa de la flexibilidad, ya que cada aplicación cargará la misma copia de la DLL.

Sin embargo, la vinculación estática no siempre es una opción. Por ejemplo, no puede vincular estáticamente una aplicación .NET. El usuario debe tener las bibliotecas .NET para ejecutar una aplicación .NET y las bibliotecas (o ensamblados, como se denominan en .NET) se cargan en tiempo de ejecución.

Los archivos DLL se crean con las mismas herramientas que se utilizan para crear aplicaciones. Los detalles específicos dependen mucho de las herramientas utilizadas.

Brian Rasmussen
fuente
Gracias por la respuesta, una cosa que me pregunto es ¿cómo saben las aplicaciones qué funciones están disponibles en la dll? El dll en sí es todo código de máquina, ¿verdad? Entonces, ¿cómo se exponen las firmas de funciones públicas en el dll?
Daniel
No conozco la mayoría de los idiomas, pero el autocompletado de Visual Studio le mostrará todas las funciones disponibles.
Grant
1
Pero, ¿cómo averigua el autocompletado cuáles son las funciones disponibles si el dll es solo código de máquina?
Daniel
2
Las máquinas pueden leer código de máquina. Los archivos DLL pueden contener iconos, cadenas, fuentes. Es de suponer que hay una lista de lo que contiene en algún lugar.
Grant
1
Visual C ++ contiene una herramienta llamada dumpbin - ejecutar "dumpbin / export anything.dll" le dirá qué funciones y cosas se exportan (es decir, están disponibles para que las utilicen los programas que cargan la DLL).
Graeme Perrow
29

DLL = Biblioteca de vínculos dinámicos

El nombre es bastante descriptivo de lo que logran.

Biblioteca

Le permite aislar el código para un dominio de problema específico en una sola ubicación. Luego, comparta esto entre varias aplicaciones. La biblioteca se puede cambiar por otra en cualquier momento para corregir errores o agregar funcionalidad.

Enlace

Puede "Vincular" la biblioteca a una aplicación para que la lógica de la biblioteca no se compile directamente en la aplicación.

Dinámica

La biblioteca se puede cargar a pedido. En lugar de cargar un solo EXE gigantesco en la memoria, el sistema operativo puede cargar solo las partes necesarias. Además, si una DLL se comparte entre aplicaciones, el sistema operativo puede optimizar la forma en que se carga la biblioteca y compartirla entre aplicaciones.

Paul Alexander
fuente
10

Los archivos DLL (biblioteca de vínculos dinámicos) se pueden describir como pequeños "subprogramas" que están destinados a ayudar a que un programa más grande funcione bien. Proporcionan un medio para vincular varios recursos de hardware y software (en varios puntos de sus sesiones de tiempo de ejecución) al programa ejecutable principal en el que se basan, según surja la necesidad. Esto elimina la necesidad de cargar todo lo relacionado con el programa ejecutable principal en la RAM de la computadora (memoria de acceso aleatorio) cuando el programa se ejecuta por primera vez.

Los recursos de software que llevan las DLL incluyen código para las diversas funciones del programa que no son realmente necesarias para mantener el programa en ejecución: es decir, funciones que solo necesitan ser invocadas en ciertos momentos durante una sesión de computación determinada y que en realidad ni siquiera necesitan ser llamado en absoluto. Cargar esas funciones (y puede haber un número considerable de ellas para un programa determinado) en la RAM de la computadora cuando el programa se ejecuta por primera vez y luego mantenerlas allí durante toda la sesión sería una pérdida de espacio de RAM, que se considera que está en un premio.

Un gran avance:

El desarrollo de DLL fue un avance importante en la informática, porque antes de que estuvieran disponibles, todo lo relacionado con un programa (incluidas las funciones que rara vez se usaban) tenía que cargarse en la RAM cuando el programa se cargaba por primera vez. Eso llevó a una informática extremadamente ineficiente, con velocidades más lentas exhibidas por varios programas. También era extremadamente difícil realizar varias tareas al ejecutar incluso un par de programas simples, debido a la tensión que conlleva la RAM.

Consideraciones:

Las DLL suelen ser específicas de la versión. Aquellos que funcionan bien para, digamos, la Versión 1 de un programa (o un lenguaje de programación, como puede ser el caso) pueden no funcionar bien con la Versión 2. La regla general es que las DLL de la versión anterior tienden a no funcionar bien con la versión más nueva, pero los de la versión más nueva generalmente pueden funcionar bastante bien con la versión anterior del programa o lenguaje de programación.

judy smith
fuente
7

Biblioteca enlazada dinámicamente.

Para darle un ejemplo, si tiene la DLL de otra persona cargada en su aplicación, puede usar fragmentos de programación de ella.

Puede cargar una DLL que genera números aleatorios que siempre comienzan con "5" o algo así.

En su programa puede llamar CrazyDLL.GenerateRandomNumbersSorta () y devolverá el número.

Para un ejemplo del mundo real, tengo una DLL que combina 4 cuadros de texto (los usaría para escribir direcciones IP) y automáticamente solo acepta números menores a 256, y maneja presionar la tecla de retroceso para saltar a un cuadro de texto anterior.

He creado una DLL con ese código, y ahora todo lo que tengo que hacer es arrastrar y soltar más colecciones de cuadros de texto de direcciones IP sin tener que duplicar todo ese código una y otra vez.

La misma DLL también tiene la función de convertir direcciones IP en cadenas hexadecimales y otro código útil.

Grant
fuente
1

Desde MSDN Library :

Una biblioteca de vínculos dinámicos (DLL) es un módulo que contiene funciones y datos que pueden ser utilizados por otro módulo (aplicación o DLL).

Nemanja Trifunovic
fuente
1

DLL = Biblioteca de vínculos de carga dinámica . Como le han dicho, es básicamente una colección de funciones, clases C ++ y / o variables globales. Puede cargar la DLL estáticamente (es decir, el sistema operativo la carga automáticamente cuando se inicia el programa) o dinámicamente (su programa la carga explícitamente), momento en el que las funciones y el material dentro de la DLL están disponibles para su programa.

Crear uno es similar a crear un EXE, excepto que no es necesario que haya una main()función. Hay directivas del vinculador para indicarle al vinculador que cree una DLL en lugar de un EXE.

La razón principal por la que querría hacer esto es encapsular algo de código en un lugar y usarlo desde múltiples exe, en lugar de vincular el código en cada uno.

Una razón un tanto histórica es que su exe puede ser más pequeño ya que parte del código se encuentra físicamente en un archivo diferente. Esto significa que la cantidad de espacio ocupado en la memoria por su exe puede ser menor. En los sistemas modernos, esto es menos problemático de lo que solía ser, aunque aún podría ser un problema en Windows Mobile.

Graeme Perrow
fuente