Ich möchte den genauen Unterschied zwischen der DLL- und der Exe-Datei kennen.
Ich möchte den genauen Unterschied zwischen der DLL- und der Exe-Datei kennen.
Antworten:
EXE:
DLL:
Für weitere Details: 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_E__
Referenz: http://www.dotnetspider.com/forum/34260-What-difference-between-dll-exe.aspx
LibMain
Funktion eine Benachrichtigung erhalten, wenn ein Thread gestartet oder gestoppt wird .
Ich weiß nicht, warum jeder diese Frage im Kontext von .NET beantwortet. Die Frage war allgemein und erwähnte .NET nirgendwo.
Nun, die Hauptunterschiede sind:
EXE
DLL
Das Dateiformat von DLL und exe ist im Wesentlichen dasselbe. Windows erkennt den Unterschied zwischen DLL und EXE über den PE-Header in der Datei. Einzelheiten zum PE-Header finden Sie in diesem Artikel zu MSDN
Der Unterschied besteht darin, dass eine EXE-Datei einen Einstiegspunkt hat, eine "Haupt" -Methode, die bei der Ausführung ausgeführt wird.
Der Code in einer DLL muss von einer anderen Anwendung aufgerufen werden.
Es gibt noch einige Unterschiede in Bezug auf die Struktur, die Sie erwähnen könnten.
Characteristics
Mitglied von IMAGE_FILE_HEADER
innen schauen IMAGE_NT_HEADERS
. Für eine DLL ist das IMAGE_FILE_DLL
Flag (0x2000) aktiviert. Für eine EXE ist es das IMAGE_FILE_EXECUTABLE_IMAGE
(0x2) -Flag.IMAGE_OPTIONAL_HEADER
) befindet sich das ImageBase
Mitglied. Es gibt die virtuelle Adresse an, unter der das PE davon ausgeht, dass es geladen wird. Wenn es an einer anderen Adresse geladen wird, können einige Zeiger auf den falschen Speicher verweisen. Da EXE-Dateien zu den ersten gehören, die in ihren neuen Adressraum geladen werden, kann der Windows-Loader eine konstante Ladeadresse sicherstellen, und das ist normalerweise 0x00400000. Dieser Luxus existiert für eine DLL nicht. Zwei in denselben Prozess geladene DLL-Dateien können dieselbe Adresse anfordern. Aus diesem Grund verfügt eine DLL über ein anderes Datenverzeichnis namens Base Relocation Directory, das sich normalerweise in einem eigenen Abschnitt befindet .reloc
. Dieses Verzeichnis enthält eine Liste von Stellen in der DLL, die neu basiert / gepatcht werden müssen, damit sie auf den richtigen Speicher verweisen. Die meisten EXE-Dateien haben dieses Verzeichnis nicht, aber einige alte Compiler generieren sie.Weitere Informationen zu diesem Thema finden Sie unter @ MSDN .
Diese Antwort war etwas detaillierter als ich dachte, las sie aber durch.
DLL:
In den meisten Fällen ist eine DLL-Datei eine Bibliothek . Es gibt verschiedene Arten von Bibliotheken, dynamische und statische - lesen Sie über den Unterschied . DLL steht für Dynamic Link Library, die uns sagt, dass es ein Teil des Programms ist, aber nicht das Ganze. Es besteht aus wiederverwendbaren Softwarekomponenten ( Bibliothek ), die Sie für mehr als ein einzelnes Programm verwenden können . Beachten Sie, dass es in vielen Anwendungen immer möglich ist, den Quellcode der Bibliothek mithilfe von Copy-Paste zu verwenden. Die Idee einer DLL / statischen Bibliothek besteht jedoch darin, dass Sie den Code einer Bibliothek aktualisieren und gleichzeitig alle Anwendungen mit aktualisieren können es - ohne zu kompilieren.
Beispiel:
Stellen Sie sich vor, Sie erstellen eine Windows-GUI-Komponente wie eine Schaltfläche . In den meisten Fällen möchten Sie den von Ihnen geschriebenen Code wiederverwenden, da es sich um eine komplexe, aber häufig vorkommende Komponente handelt. Sie möchten, dass viele Anwendungen ihn verwenden, möchten ihnen jedoch nicht den Quellcode geben, den Sie nicht kopieren können - Fügen Sie den Code für die Schaltfläche in jedes Programm ein, damit Sie eine DL-Bibliothek (DLL) erstellen möchten. .
Diese "Button" -Bibliothek wird von EXE benötigt Cutables zum Ausführen benötigt. Ohne sie werden sie nicht ausgeführt, da sie nicht wissen, wie sie die Schaltfläche erstellen, sondern nur, wie sie mit ihr sprechen.
Ebenso kann eine DLL nicht ausgeführt werden, da sie nur ein Teil des Programms ist, aber nicht über die Informationen verfügt, die zum Erstellen eines "Prozesses" erforderlich sind. .
EXE:
Eine ausführbare Datei ist das Programm . Es weiß, wie man einen Prozess erstellt und wie man mit der DLL spricht. Es benötigt die DLL, um eine Schaltfläche zu erstellen, und ohne sie wird die Anwendung nicht ausgeführt - ERROR.
hoffe das hilft....
using SomeClassFromALibrary
, wird diese Bibliothek über eine DLL mit dem Projekt verknüpft. Ich versuche nur zu sehen, ob ich richtig verstehe
Sowohl DLL als auch EXE sind PE-Formate (Portable Executable)
Eine Dynamic-Link-Bibliothek (DLL) ist eine Bibliothek und kann daher nicht direkt ausgeführt werden. Wenn Sie versuchen, es auszuführen, erhalten Sie eine Fehlermeldung über einen fehlenden Einstiegspunkt. Es benötigt einen Einstiegspunkt (Hauptfunktion), um ausgeführt zu werden. Dieser Einstiegspunkt kann eine beliebige Anwendung oder Exe sein. Die DLL-Bindung erfolgt zur Laufzeit. Deshalb heißt es "Dynamic Link" -Bibliothek.
Eine ausführbare Datei (EXE) ist ein Programm, das ausgeführt werden kann. Es hat einen eigenen Einstiegspunkt. Ein Flag im PE-Header gibt an, um welchen Dateityp es sich handelt (unabhängig von der Dateierweiterung). Der PE-Header enthält ein Feld, in dem sich der Einstiegspunkt für das Programm befindet. In DLLs wird es nicht verwendet (oder zumindest nicht als Einstiegspunkt).
Es gibt viele Software zur Überprüfung der Header-Informationen. Der einzige Unterschied, der dazu führt, dass beide unterschiedlich funktionieren, ist das Bit im Header, wie in der folgenden Abbildung gezeigt.
Die EXE-Datei hat nur einen einzigen Haupteintrag. Dies bedeutet, dass es sich um eine isolierte Anwendung handelt. Wenn ein System exe startet, wird ein neuer Prozess erstellt, während DLLs viele Einstiegspunkte haben. Wenn die Anwendung sie verwendet, wird kein neuer Prozess gestartet. Die DLL kann wiederverwendet und versioniert werden. DLL reduziert den Speicherplatz, da verschiedene Programme dieselbe DLL verwenden können.
.exe
oder .dll
nicht? Es ist dieses Flag in der Kopfzeile, das sie wirklich auszeichnet. Wenn ich also ein Flag erstelle exe
und es über die GUI-Interaktion .dll
benenne, aber dann dieses Flag manuell ändere, ist es immer noch lauffähig?
Zwei Dinge: die Erweiterung und das Header-Flag, die in der Datei gespeichert sind.
Beide Dateien sind PE-Dateien. Beide enthalten genau das gleiche Layout. Eine DLL ist eine Bibliothek und kann daher nicht ausgeführt werden. Wenn Sie versuchen, es auszuführen, wird eine Fehlermeldung über einen fehlenden Einstiegspunkt angezeigt. Eine EXE ist ein Programm, das ausgeführt werden kann. Es hat einen Einstiegspunkt. Ein Flag im PE-Header gibt an, um welchen Dateityp es sich handelt (unabhängig von der Dateierweiterung). Der PE-Header enthält ein Feld, in dem sich der Einstiegspunkt für das Programm befindet. In DLLs wird es nicht verwendet (oder zumindest nicht als Einstiegspunkt).
Ein kleiner Unterschied besteht darin, dass DLLs in den meisten Fällen einen Exportabschnitt haben , in den Symbole exportiert werden. EXEs sollten niemals einen Exportabschnitt haben, da sie keine Bibliotheken sind, aber nichts verhindert dies. Dem Win32-Loader ist das egal.
Ansonsten sind sie identisch. Zusammenfassend sind EXEs ausführbare Programme, während DLLs Bibliotheken sind, die in einen Prozess geladen werden und nützliche Funktionen wie Sicherheit, Datenbankzugriff oder ähnliches enthalten.
Dll v / s Exe
1) Die DLL-Datei ist eine dynamische Linkbibliothek, die in exe-Dateien und anderen DLL-Dateien verwendet werden kann.
Die EXE-Datei ist eine ausführbare Datei, die in einem separaten Prozess ausgeführt wird, der vom Betriebssystem verwaltet wird.
2) DLLs sind nicht direkt ausführbar. Dies sind separate Dateien mit Funktionen, die von Programmen und anderen DLLs aufgerufen werden können, um Berechnungen und Funktionen auszuführen.
Eine EXE ist ein Programm, das ausgeführt werden kann. Beispiel: Windows-Programm
3) Wiederverwendbarkeits-
DLL: Sie können für eine andere Anwendung wiederverwendet werden. Solange der Codierer die Namen und Parameter der Funktionen und Prozeduren in der DLL-Datei kennt.
EXE: Nur für einen bestimmten Zweck.
4) Eine DLL würde denselben Prozess und Speicherplatz der aufrufenden Anwendung gemeinsam nutzen, während eine
EXE-Datei ihren separaten Prozess- und Speicherbereich erstellt.
5) Verwendet
DLL: Sie möchten, dass viele Anwendungen es verwenden, aber Sie möchten ihnen nicht den Quellcode geben. Sie können den Code für die Schaltfläche nicht in jedem Programm kopieren und einfügen, also entscheiden Sie, dass Sie eine DL erstellen möchten. Bibliothek (DLL).
EXE: Wenn wir mit Projektvorlagen wie Windows Forms-Anwendungen, Konsolenanwendungen, WPF-Anwendungen und Windows-Diensten arbeiten, wird beim Kompilieren eine Exe-Assembly generiert.
6) Ähnlichkeiten:
Sowohl DLL als auch EXE sind Binärdateien mit einer komplexen verschachtelten Struktur, die durch das Format Portable Executable definiert ist, und sie können nicht von Benutzern bearbeitet werden.
Die .exe ist das Programm. Die DLL ist eine Bibliothek, in die eine EXE-Datei (oder eine andere DLL) aufrufen kann.
Was sakthivignesh sagt, kann darin zutreffen, dass eine .exe eine andere verwenden kann, als wäre es eine Bibliothek, und dies geschieht (zum Beispiel) mit einigen COM-Komponenten. In diesem Fall ist die "Slave" -Exe ein separates Programm (genau genommen ein separater Prozess - möglicherweise auf einem separaten Computer ausgeführt), der jedoch Anforderungen von anderen Programmen / Komponenten / was auch immer akzeptiert und verarbeitet.
Wenn Sie jedoch nur eine zufällige EXE- und DLL-Datei aus einem Ordner in Ihren Programmdateien auswählen, ist COM wahrscheinlich nicht relevant - es handelt sich lediglich um ein Programm und seine dynamisch verknüpften Bibliotheken.
Mithilfe von Win32-APIs kann ein Programm eine DLL mithilfe der LoadLibrary- und GetProcAddress-API-Funktionen IIRC laden und verwenden. In Win16 gab es ähnliche Funktionen.
COM ist in vielerlei Hinsicht eine Weiterentwicklung der DLL-Idee, die ursprünglich als Grundlage für OLE2 gedacht war, während .NET der Nachkomme von COM ist. DLLs gibt es seit Windows 1, IIRC. Sie waren ursprünglich eine Möglichkeit, Binärcode (insbesondere System-APIs) zwischen mehreren laufenden Programmen zu teilen, um die Speichernutzung zu minimieren.
Eine EXE-Datei ist für das System als reguläre ausführbare Win32-Datei sichtbar. Der Einstiegspunkt bezieht sich auf einen kleinen Loader, der die .NET-Laufzeit initialisiert und anweist, die in der EXE enthaltene Assembly zu laden und auszuführen. Eine DLL ist für das System als Win32-DLL sichtbar, jedoch höchstwahrscheinlich ohne Einstiegspunkte. Die .NET-Laufzeit speichert Informationen zur enthaltenen Assembly in einem eigenen Header.
DLL ist eine Sammlung wiederverwendbarer Funktionen, wobei eine EXE-Datei eine ausführbare Datei ist, die diese Funktionen aufrufen kann
● .exe und dll sind die kompilierte Version von c # -Code, die auch als Assemblys bezeichnet werden.
● .exe ist eine eigenständige ausführbare Datei, die direkt ausgeführt werden kann.
● .dll ist eine wiederverwendbare Komponente, die nicht direkt ausgeführt werden kann und für deren Ausführung andere Programme erforderlich sind.
Eine exe ist ein ausführbares Programm, während eine DLL eine Datei ist, die von Programmen dynamisch geladen und ausgeführt werden kann.
1) DLL ist eine In-Process-Komponente, dh sie wird im selben Speicherbereich wie der Client-Prozess ausgeführt. EXE ist eine Out-Process-Komponente, dh sie wird in einem separaten Speicherbereich ausgeführt.
2) Die DLL enthält Funktionen und Prozeduren, die andere Programme verwenden können (fördert die Wiederverwendbarkeit), während EXE nicht mit anderen Programmen geteilt werden kann.
3) DLL kann nicht direkt ausgeführt werden, da sie zum Laden und Ausführen durch andere Programme ausgelegt sind. EXE ist ein Programm, das direkt ausgeführt wird.
Für diejenigen, die eine präzise Antwort suchen,
Wenn eine Assembly als Klassenbibliothek kompiliert wird und Typen für andere Assemblys bereitstellt, hat sie die ifle-Erweiterung
.dll
(Dynamic Link Library) und kann nicht eigenständig ausgeführt werden.Wenn eine Assembly als Anwendung kompiliert wird, hat sie die Dateierweiterung
.exe
(ausführbar) und kann eigenständig ausgeführt werden. Vor .NET Core 3.0 wurden Konsolen-Apps zu DLL-Dateien kompiliert und mussten mit dem Befehl dotnet run oder einer ausführbaren Host-Datei ausgeführt werden. - Quelle
Der große genaue Unterschied zwischen DLL und EXE besteht darin, dass DLL keinen Einstiegspunkt hat und EXE. Wenn Sie mit C ++ vertraut sind, können Sie sehen, dass Build EXE die Eingabefunktion main () hat und DLL nicht :)