Je veux connaître la différence exacte entre le fichier dll et exe.
Je veux connaître la différence exacte entre le fichier dll et exe.
Réponses:
EXE:
DLL:
Pour plus de détails: 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
Référence: http://www.dotnetspider.com/forum/34260-What-difference-between-dll-exe.aspx
LibMain
fonction.
Je ne sais pas pourquoi tout le monde répond à cette question dans le contexte de .NET. La question était d'ordre général et ne mentionnait nulle part .NET.
Eh bien, les principales différences sont:
EXE
DLL
Le format de fichier DLL et exe est essentiellement le même. Windows reconnaît la différence entre DLL et EXE via l'en-tête PE dans le fichier. Pour plus de détails sur l'en-tête PE, vous pouvez consulter cet article sur MSDN
La différence est qu'un EXE a un point d'entrée, une méthode "principale" qui s'exécutera lors de l'exécution.
Le code d'une DLL doit être appelé à partir d'une autre application.
Il y a quelques autres différences concernant la structure que vous pourriez mentionner.
Characteristics
membre de l' IMAGE_FILE_HEADER
intérieur IMAGE_NT_HEADERS
. Pour une DLL, l' IMAGE_FILE_DLL
indicateur (0x2000) est activé. Pour un EXE, c'est le IMAGE_FILE_EXECUTABLE_IMAGE
drapeau (0x2).IMAGE_OPTIONAL_HEADER
est également dans les en-têtes PE ( ) ImageBase
. Il spécifie l'adresse virtuelle à laquelle le PE suppose qu'il sera chargé. S'il est chargé à une autre adresse, certains pointeurs peuvent pointer vers la mauvaise mémoire. Comme les fichiers EXE sont parmi les premiers à être chargés dans leur nouvel espace d'adressage, le chargeur Windows peut assurer une adresse de chargement constante, généralement 0x00400000. Ce luxe n'existe pas pour une DLL. Deux fichiers DLL chargés dans le même processus peuvent demander la même adresse. C'est pourquoi une DLL a un autre répertoire de données appelé Répertoire de réinstallation de base qui réside généralement dans sa propre section - .reloc
. Ce répertoire contient une liste des emplacements de la DLL qui doivent être rebasés / corrigés afin qu'ils pointent vers la bonne mémoire. La plupart des fichiers EXE n'ont pas ce répertoire, mais certains anciens compilateurs les génèrent.Vous pouvez en savoir plus sur ce sujet @ MSDN .
Cette réponse était un peu plus détaillée que je ne le pensais, mais lisez-la attentivement.
DLL:
dans la plupart des cas, un fichier DLL est une bibliothèque . Il existe plusieurs types de bibliothèques, dynamiques et statiques - lisez la différence . DLL signifie bibliothèque de liens dynamiques qui nous dit que cela fait partie du programme mais pas le tout. Il est composé de composants logiciels réutilisables ( bibliothèque ) que vous pouvez utiliser pour plusieurs programmes . Gardez à l'esprit qu'il est toujours possible d'utiliser le code source de la bibliothèque dans de nombreuses applications en utilisant le copier-coller, mais l'idée d'une DLL / bibliothèque statique est que vous pouvez mettre à jour le code d'une bibliothèque et en même temps mettre à jour toutes les applications en utilisant il - sans compiler.
Par exemple:
imaginez que vous créez un composant d'interface graphique Windows comme un bouton . Dans la plupart des cas, vous voudrez réutiliser le code que vous avez écrit car il s'agit d'un composant complexe mais courant - Vous voulez que de nombreuses applications l'utilisent mais vous ne voulez pas leur donner le code source Vous ne pouvez pas copier - collez le code du bouton dans chaque programme, vous décidez donc que vous souhaitez créer une DL-Library (DLL) .
Cette bibliothèque de "boutons" est requise par les cutables EXE pour s'exécuter, et sans elle, ils ne fonctionneront pas car ils ne savent pas comment créer le bouton, mais seulement comment lui parler.
De même, une DLL ne peut pas être exécutée - exécutée, car ce n'est qu'une partie du programme mais ne dispose pas des informations nécessaires pour créer un «processus» .
EXE:
un exécutable est le programme . Il sait comment créer un processus et comment parler à la DLL. Il a besoin de la DLL pour créer un bouton, et sans elle l'application ne s'exécute pas - ERREUR.
J'espère que cela t'aides....
using SomeClassFromALibrary
, cette bibliothèque est liée au projet via une DLL? J'essaie juste de voir si je comprends bien
using
pour les espaces de noms, pas pour les classes. L'exception est using static
disponible à partir de c # 6 qui importe tous les membres statiques présents dans la classe spécifiée ( lien ). Le using
mot-clé promet au compilateur qu'au moment de l'exécution, il y aura une bibliothèque contenant cet espace de noms . La bibliothèque n'est pas liée au projet via cette DLL, la DLL est la bibliothèque liée au projet (assemblage). Cette DLL contient tout le code promis au moment de la compilation.
DLL et EXE sont des formats exécutables portables (PE)
Une bibliothèque de liens dynamiques (DLL) est une bibliothèque et ne peut donc pas être exécutée directement. Si vous essayez de l'exécuter, vous obtiendrez une erreur concernant un point d'entrée manquant. Il a besoin d'un point d'entrée (fonction principale) pour être exécuté, ce point d'entrée peut être n'importe quelle application ou exe. La liaison DLL se produit au moment de l'exécution. C'est pourquoi sa bibliothèque appelée "Dynamic Link".
Un exécutable (EXE) est un programme qui peut être exécuté. Il a son propre point d'entrée. Un indicateur à l'intérieur de l'en-tête PE indique de quel type de fichier il s'agit (sans rapport avec l'extension de fichier). L'en-tête PE a un champ où réside le point d'entrée du programme. Dans les DLL, il n'est pas utilisé (ou du moins pas comme point d'entrée).
Il existe de nombreux logiciels disponibles pour vérifier les informations d'en-tête. La seule différence qui fait que les deux fonctionnent différemment est le bit dans l'en-tête comme indiqué dans le diagramme ci-dessous.
Le fichier EXE n'a qu'une seule entrée principale signifie qu'il s'agit d'une application isolée, lorsqu'un système lance un exe, un nouveau processus est créé tandis que les DLL ont de nombreux points d'entrée.Ainsi, lorsque l'application l'utilise, aucun nouveau processus ne démarre, la DLL peut être réutilisée et versionnée. DLL réduit l'espace de stockage car différents programmes peuvent utiliser la même DLL.
.exe
ou .dll
non? C'est cet indicateur dans l'en-tête qui les distingue vraiment ... Donc, si je crée un exe
et le nomme via une interaction GUI comme un .dll
, mais que je change ensuite cet indicateur manuellement, il est toujours exécutable?
Deux choses: l'extension et l'indicateur d'en-tête stockés dans le fichier.
Les deux fichiers sont des fichiers PE. Les deux contiennent exactement la même disposition. Une DLL est une bibliothèque et ne peut donc pas être exécutée. Si vous essayez de l'exécuter, vous obtiendrez une erreur concernant un point d'entrée manquant. Un EXE est un programme qui peut être exécuté. Il a un point d'entrée. Un indicateur à l'intérieur de l'en-tête PE indique de quel type de fichier il s'agit (sans rapport avec l'extension de fichier). L'en-tête PE a un champ où réside le point d'entrée du programme. Dans les DLL, il n'est pas utilisé (ou du moins pas comme point d'entrée).
Une différence mineure est que dans la plupart des cas, les DLL ont une section d'exportation où les symboles sont exportés. Les EXE ne devraient jamais avoir de section d'exportation car ils ne sont pas des bibliothèques mais rien n'empêche que cela se produise. Le chargeur Win32 ne se soucie pas de toute façon.
A part ça, ils sont identiques. Donc, en résumé, les EXE sont des programmes exécutables tandis que les DLL sont des bibliothèques chargées dans un processus et contiennent une sorte de fonctionnalité utile comme la sécurité, l'accès à la base de données ou autre.
Dll v / s Exe
1) Le fichier DLL est une bibliothèque de liens dynamiques qui peut être utilisée dans des fichiers exe et d'autres fichiers dll.
Le fichier EXE est un fichier exécutable qui s'exécute dans un processus distinct géré par le système d'exploitation.
2) Les DLL ne sont pas directement exécutables. Ce sont des fichiers séparés contenant des fonctions qui peuvent être appelées par des programmes et d'autres DLL pour effectuer des calculs et des fonctions.
Un EXE est un programme qui peut être exécuté. Ex: programme Windows
3)
DLL de réutilisation : elles peuvent être réutilisées pour une autre application. Tant que le codeur connaît les noms et les paramètres des fonctions et des procédures dans le fichier DLL.
EXE: uniquement à des fins spécifiques.
4) Une DLL partagerait le même processus et l'espace mémoire de l'application appelante tandis qu'un
EXE crée son processus et son espace mémoire séparés.
5) Utilise la
DLL: vous voulez que de nombreuses applications l'utilisent mais vous ne voulez pas leur donner le code source Vous ne pouvez pas copier-coller le code du bouton dans chaque programme, vous décidez donc que vous voulez créer un DL- Bibliothèque (DLL).
EXE: Lorsque nous travaillons avec des modèles de projet tels que les applications Windows Forms, les applications console, les applications WPF et les services Windows, ils génèrent un assemblage exe lors de la compilation.
6) Similitudes:
DLL et EXE sont des fichiers binaires ayant une structure imbriquée complexe définie par le format Portable Executable, et ils ne sont pas destinés à être modifiables par les utilisateurs.
Le .exe est le programme. Le .dll est une bibliothèque dans laquelle un .exe (ou un autre .dll) peut appeler.
Ce que dit sakthivignesh peut être vrai en ce qu'un .exe peut en utiliser un autre comme s'il s'agissait d'une bibliothèque, et cela se fait (par exemple) avec certains composants COM. Dans ce cas, le "slave" .exe est un programme séparé (à proprement parler, un processus séparé - peut-être exécuté sur une machine séparée), mais qui accepte et gère les demandes d'autres programmes / composants / quoi que ce soit.
Cependant, si vous choisissez simplement un .exe et un .dll aléatoires dans un dossier de vos fichiers programme, il y a de fortes chances que COM ne soit pas pertinent - il ne s'agit que d'un programme et de ses bibliothèques liées dynamiquement.
À l'aide des API Win32, un programme peut charger et utiliser une DLL à l'aide des fonctions API LoadLibrary et GetProcAddress, IIRC. Il y avait des fonctions similaires dans Win16.
COM est à bien des égards une évolution de l'idée de DLL, initialement conçue comme la base de OLE2, alors que .NET est le descendant de COM. Les DLL existent depuis Windows 1, IIRC. Ils étaient à l'origine un moyen de partager du code binaire (en particulier les API système) entre plusieurs programmes en cours d'exécution afin de minimiser l'utilisation de la mémoire.
Un EXE est visible par le système comme un exécutable Win32 normal. Son point d'entrée fait référence à un petit chargeur qui initialise le runtime .NET et lui dit de charger et d'exécuter l'assembly contenu dans le fichier EXE. Une DLL est visible par le système en tant que DLL Win32, mais probablement sans aucun point d'entrée. Le runtime .NET stocke les informations sur l'assembly contenu dans son propre en-tête.
dll est une collection de fonctions réutilisables où en tant que .exe est un exécutable qui peut appeler ces fonctions
Un exe est un programme exécutable tandis qu'une DLL est un fichier qui peut être chargé et exécuté par des programmes de manière dynamique.
● .exe et dll sont la version compilée du code c # qui sont également appelés assemblys.
● .exe est un fichier exécutable autonome, ce qui signifie qu'il peut être exécuté directement.
● .dll est un composant réutilisable qui ne peut pas être exécuté directement et qui nécessite d'autres programmes pour l'exécuter.
1) DLL est un composant en cours d'exécution, ce qui signifie qu'il s'exécute dans le même espace mémoire que le processus client. EXE est un composant Out-Process, ce qui signifie qu'il s'exécute dans son propre espace mémoire séparé.
2) La DLL contient des fonctions et des procédures que d'autres programmes peuvent utiliser (favorise la réutilisation) alors qu'EXE ne peut pas être partagé avec d'autres programmes.
3) Les DLL ne peuvent pas être exécutées directement car elles sont conçues pour être chargées et exécutées par d'autres programmes. EXE est un programme exécuté directement.
Pour ceux qui recherchent une réponse concise,
Si un assembly est compilé en tant que bibliothèque de classes et fournit des types pour d'autres assemblys à utiliser, alors il a l'extension ifle
.dll
(bibliothèque de liens dynamiques), et il ne peut pas être exécuté de manière autonome.De même, si un assembly est compilé en tant qu'application, alors il a l'extension de fichier
.exe
(exécutable) et peut être exécuté de manière autonome. Avant .NET Core 3.0, les applications de console étaient compilées dans des fichiers .dll et devaient être exécutées par la commande dotnet run ou un exécutable hôte. - Source
La principale différence exacte entre DLL et EXE est que DLL n'a pas de point d'entrée et EXE. Si vous êtes familier avec C ++, vous pouvez voir que build EXE a la fonction d'entrée main () et que DLL ne le fait pas :)