Quiero saber la diferencia exacta entre el archivo dll y exe.
Quiero saber la diferencia exacta entre el archivo dll y exe.
Respuestas:
EXE:
DLL:
Para obtener más detalles: http://www.c-sharpcorner.com/Interviews/Answer/Answers.aspxQuestionId=1431&MajorCategoryId=1&MinorCategoryId=1 http://wiki.answers.com/Q/What_is_the_difference_between_an_EXE_and_a_DLL
Referencia: http://www.dotnetspider.com/forum/34260-What-difference-between-dll-exe.aspx
LibMain
función.
No sé por qué todos responden a esta pregunta en el contexto de .NET. La pregunta era general y no mencionaba .NET en ninguna parte.
Bueno, las principales diferencias son:
exe
DLL
El formato de archivo de DLL y exe es esencialmente el mismo. Windows reconoce la diferencia entre DLL y EXE a través del encabezado PE en el archivo. Para obtener más información sobre el encabezado PE, puede consultar este artículo en MSDN
La diferencia es que un EXE tiene un punto de entrada, un método "principal" que se ejecutará en la ejecución.
El código dentro de una DLL debe llamarse desde otra aplicación.
Hay algunas diferencias más con respecto a la estructura que podría mencionar.
Characteristics
miembro de IMAGE_FILE_HEADER
adentro IMAGE_NT_HEADERS
. Para una DLL, tiene el IMAGE_FILE_DLL
indicador (0x2000) activado. Para un EXE, es la IMAGE_FILE_EXECUTABLE_IMAGE
bandera (0x2).IMAGE_OPTIONAL_HEADER
) está el ImageBase
miembro. Especifica la dirección virtual en la que el PE supone que se cargará. Si se carga en otra dirección, algunos indicadores podrían apuntar a la memoria incorrecta. Como los archivos EXE se encuentran entre los primeros en cargarse en su nuevo espacio de direcciones, el cargador de Windows puede asegurar una dirección de carga constante, que suele ser 0x00400000. Ese lujo no existe para una DLL. Dos archivos DLL cargados en el mismo proceso pueden solicitar la misma dirección. Es por eso que una DLL tiene otro directorio de datos llamado Base Relocation Directory que generalmente reside en su propia sección - .reloc
. Este directorio contiene una lista de lugares en la DLL que necesitan ser modificados / parcheados para que apunten a la memoria correcta. La mayoría de los archivos EXE no tienen este directorio, pero algunos compiladores antiguos los generan.Puede leer más sobre este tema en MSDN .
Esta respuesta fue un poco más detallada de lo que pensaba, pero léala.
DLL:
en la mayoría de los casos, un archivo DLL es una biblioteca . Hay un par de tipos de bibliotecas, dinámicas y estáticas; lea acerca de la diferencia . DLL significa biblioteca de enlaces dinámicos que nos dice que es parte del programa pero no todo. Está hecho de componentes de software reutilizables ( biblioteca ) que puede usar para más de un programa . Tenga en cuenta que siempre es posible usar el código fuente de la biblioteca en muchas aplicaciones usando copiar y pegar, pero la idea de una biblioteca DLL / estática es que puede actualizar el código de una biblioteca y al mismo tiempo actualizar todas las aplicaciones usando it - sin compilar.
Por ejemplo:
Imagine que está creando un componente GUI de Windows como un botón . En la mayoría de los casos, querrá reutilizar el código que ha escrito porque es uncomponentecomplejo pero común . Quiere que muchas aplicaciones lo usen pero no quiere darles el código fuente. No puede copiarlo. -pegue el código del botón en cada programa, para que decida que desea crear una biblioteca DL (DLL) .
Esta biblioteca de "botones" es necesaria para EXE tablas de programación de para ejecutarse, y sin ella no se ejecutarán porque no saben cómo crear el botón, solo cómo hablar con él.
Asimismo, una DLL no se puede ejecutar, ejecutar, porque es solo una parte del programa, pero no tiene la información necesaria para crear un "proceso" .
EXE:
un ejecutable es el programa . Sabe crear un proceso y cómo comunicarse con la DLL. Se necesita la DLL para crear un botón, y sin que la aplicación no se ejecuta - ERROR.
espero que esto ayude....
using SomeClassFromALibrary
, ¿esa biblioteca está vinculada al proyecto a través de una DLL? Solo trato de ver si entiendo correctamente
using
para espacios de nombres, no clases. La excepción está using static
disponible en c # 6, que importa todos los miembros estáticos presentes en la clase especificada ( enlace ). La using
palabra clave promete al compilador que en tiempo de ejecución habrá una biblioteca que contenga ese espacio de nombres . La biblioteca no está vinculada al proyecto a través de esa DLL, la DLL es la biblioteca que está vinculada al proyecto (ensamblado). Esa DLL contiene todo el código que se prometió en tiempo de compilación.
Tanto DLL como EXE son formatos ejecutables portátiles (PE)
Una biblioteca de vínculos dinámicos (DLL) es una biblioteca y, por lo tanto, no se puede ejecutar directamente. Si intenta ejecutarlo, obtendrá un error sobre un punto de entrada faltante. Necesita un punto de entrada (función principal) para ejecutarse, ese punto de entrada puede ser cualquier aplicación o exe. El enlace de DLL se produce en tiempo de ejecución. Es por eso que se llama biblioteca "Dynamic Link".
Un ejecutable (EXE) es un programa que se puede ejecutar. Tiene su propio punto de entrada. Una bandera dentro del encabezado PE indica qué tipo de archivo es (sin importar la extensión del archivo). El encabezado PE tiene un campo donde reside el punto de entrada del programa. En las DLL no se usa (o al menos no como punto de entrada).
Hay muchos programas disponibles para verificar la información del encabezado. La única diferencia que hace que ambos funcionen de manera diferente es el bit en el encabezado como se muestra en el diagrama a continuación.
El archivo EXE tiene una sola entrada principal, lo que significa que es una aplicación aislada, cuando un sistema inicia un exe, se crea un nuevo proceso, mientras que las DLL tienen muchos puntos de entrada, por lo que cuando la aplicación lo usa, no se inicia un nuevo proceso, la DLL se puede reutilizar y versionar. DLL reduce el espacio de almacenamiento ya que diferentes programas pueden usar el mismo dll.
.exe
o .dll
no? Es esa bandera en el encabezado lo que realmente los distingue ... Entonces, si hago un exe
y lo nombro a través de la interacción GUI como a .dll
, pero luego cambio esa bandera manualmente, ¿aún se puede ejecutar?
Dos cosas: la extensión y el indicador de encabezado almacenados en el archivo.
Ambos archivos son archivos PE. Ambos contienen exactamente el mismo diseño. Una DLL es una biblioteca y, por lo tanto, no se puede ejecutar. Si intenta ejecutarlo, obtendrá un error sobre un punto de entrada faltante. Un EXE es un programa que se puede ejecutar. Tiene un punto de entrada. Una bandera dentro del encabezado PE indica qué tipo de archivo es (sin importar la extensión del archivo). El encabezado PE tiene un campo donde reside el punto de entrada del programa. En las DLL no se utiliza (o al menos no como punto de entrada).
Una pequeña diferencia es que, en la mayoría de los casos, los archivos DLL tienen una sección de exportación donde se exportan los símbolos. Los EXE nunca deberían tener una sección de exportación, ya que no son bibliotecas, pero nada impide que eso suceda. Al cargador Win32 no le importa de ninguna manera.
Aparte de eso, son idénticos. Entonces, en resumen, los EXE son programas ejecutables, mientras que las DLL son bibliotecas cargadas en un proceso y contienen algún tipo de funcionalidad útil como seguridad, acceso a la base de datos o algo así.
Dll v / s Exe
1) El archivo DLL es una biblioteca de vínculos dinámicos que se puede utilizar en archivos exe y otros archivos dll.
El archivo EXE es un archivo ejecutable que se ejecuta en un proceso separado que es administrado por el sistema operativo.
2) Las DLL no se pueden ejecutar directamente. Son archivos separados que contienen funciones que pueden ser invocadas por programas y otras DLL para realizar cálculos y funciones.
Un EXE es un programa que se puede ejecutar. Ej: programa de Windows
3)
DLL de reutilización : se pueden reutilizar para alguna otra aplicación. Siempre que el codificador conozca los nombres y parámetros de las funciones y procedimientos en el archivo DLL.
EXE: solo para fines específicos.
4) Una DLL compartiría el mismo proceso y espacio de memoria de la aplicación que llama, mientras que un
EXE crea su proceso y espacio de memoria separados.
5) Utiliza
DLL: desea que muchas aplicaciones lo usen, pero no desea darles el código fuente. No puede copiar y pegar el código del botón en todos los programas, por lo que decide que desea crear un DL- Biblioteca (DLL).
EXE: cuando trabajamos con plantillas de proyectos como aplicaciones de Windows Forms, aplicaciones de consola, aplicaciones WPF y servicios de Windows, generan un ensamblado exe cuando se compilan.
6) Similitudes:
Tanto DLL como EXE son archivos binarios que tienen una estructura anidada compleja definida por el formato Portable Executable, y no están diseñados para que los usuarios puedan editarlos.
El .exe es el programa. El .dll es una biblioteca a la que puede llamar un .exe (u otro .dll).
Lo que dice sakthivignesh puede ser cierto en que un .exe puede usar otro como si fuera una biblioteca, y esto se hace (por ejemplo) con algunos componentes COM. En este caso, el .exe "esclavo" es un programa separado (estrictamente hablando, un proceso separado - quizás ejecutándose en una máquina separada), pero uno que acepta y maneja solicitudes de otros programas / componentes / lo que sea.
Sin embargo, si solo elige un .exe y .dll al azar de una carpeta en sus Archivos de programa, es probable que COM no sea relevante: son solo un programa y sus bibliotecas vinculadas dinámicamente.
Con las API de Win32, un programa puede cargar y utilizar una DLL mediante las funciones de API LoadLibrary y GetProcAddress, IIRC. Había funciones similares en Win16.
COM es en muchos sentidos una evolución de la idea de DLL, originalmente concebida como la base de OLE2, mientras que .NET es el descendiente de COM. Las DLL han existido desde Windows 1, IIRC. Originalmente, eran una forma de compartir código binario (particularmente API del sistema) entre múltiples programas en ejecución para minimizar el uso de memoria.
Un EXE es visible para el sistema como un ejecutable Win32 normal. Su punto de entrada se refiere a un pequeño cargador que inicializa el tiempo de ejecución de .NET y le dice que cargue y ejecute el ensamblado contenido en el EXE. Una DLL es visible para el sistema como una DLL de Win32, pero probablemente sin puntos de entrada. El tiempo de ejecución de .NET almacena información sobre el ensamblado contenido en su propio encabezado.
dll es una colección de funciones reutilizables donde, como .exe, es un ejecutable que puede llamar a estas funciones
Un exe es un programa ejecutable, mientras que una DLL es un archivo que los programas pueden cargar y ejecutar de forma dinámica.
● .exe y dll son la versión compilada del código c # que también se denominan ensamblados.
● .exe es un archivo ejecutable independiente, lo que significa que se puede ejecutar directamente.
● .dll es un componente reutilizable que no se puede ejecutar directamente y requiere de otros programas para ejecutarlo.
1) DLL es un componente en proceso, lo que significa que se ejecuta en el mismo espacio de memoria que el proceso del cliente. EXE es un componente de proceso externo, lo que significa que se ejecuta en su propio espacio de memoria separado.
2) La DLL contiene funciones y procedimientos que otros programas pueden usar (promueve la confiabilidad) mientras que EXE no se puede compartir con otros programas.
3) DLL no se puede ejecutar directamente, ya que están diseñados para ser cargados y ejecutados por otros programas. EXE es un programa que se ejecuta directamente.
Para aquellos que buscan una respuesta concisa,
Si un ensamblado se compila como una biblioteca de clases y proporciona tipos para que los usen otros ensamblados, entonces tiene la extensión ifle
.dll
(biblioteca de vínculos dinámicos) y no se puede ejecutar de forma independiente.Del mismo modo, si un ensamblado se compila como una aplicación, entonces tiene la extensión de archivo
.exe
(ejecutable) y se puede ejecutar de forma independiente. Antes de .NET Core 3.0, las aplicaciones de consola se compilaban en archivos .dll y tenían que ser ejecutadas por el comando dotnet run o un ejecutable de host. - fuente
La principal diferencia exacta entre DLL y EXE es que DLL no tiene un punto de entrada y EXE sí. Si está familiarizado con c ++, puede ver que build EXE tiene la función de entrada main () y DLL no :)