it-swarm.com.de

Was genau sind DLL Dateien und wie funktionieren sie?

Wie genau funktionieren DLL Dateien? Es scheint sehr viele von ihnen zu geben, aber ich weiß nicht, was sie sind oder wie sie funktionieren.

Also, was ist mit ihnen los?

193
stalepretzel

Was ist eine DLL?

Dynamic Link Libraries (DLLs) ähneln EXEs, sind jedoch nicht direkt ausführbar. Sie ähneln den .so-Dateien unter Linux/Unix. Das heißt, DLLs sind die Implementierung von gemeinsam genutzten Bibliotheken durch MS.

DLLs ähneln so sehr einer EXE-Datei, dass das Dateiformat selbst dasselbe ist. Sowohl EXE- als auch DLL-Dateien basieren auf dem PE-Dateiformat (Portable Executable). DLLs können auch COM-Komponenten und .NET-Bibliotheken enthalten.

Was enthält eine DLL?

A DLL enthält Funktionen, Klassen, Variablen, Benutzeroberflächen und Ressourcen (wie Symbole, Bilder, Dateien, ...), die eine EXE-Datei oder andere DLL Verwendet.

Arten von Bibliotheken:

Auf praktisch allen Betriebssystemen gibt es zwei Arten von Bibliotheken. Statische Bibliotheken und dynamische Bibliotheken. In Windows lauten die Dateierweiterungen wie folgt: Statische Bibliotheken (.lib) und dynamische Bibliotheken (.dll). Der Hauptunterschied besteht darin, dass statische Bibliotheken zur Kompilierzeit mit der ausführbaren Datei verknüpft sind. Während dynamisch verknüpfte Bibliotheken erst zur Laufzeit verknüpft werden.

Weitere Informationen zu statischen und dynamischen Bibliotheken:

Auf Ihrem Computer werden jedoch normalerweise keine statischen Bibliotheken angezeigt, da eine statische Bibliothek direkt in ein Modul (EXE oder DLL) eingebettet ist. Eine dynamische Bibliothek ist eine eigenständige Datei.

A DLL kann jederzeit geändert werden und wird nur zur Laufzeit geladen, wenn eine EXE die DLL explizit lädt. Eine statische Bibliothek kann nicht mehr geändert werden, sobald sie innerhalb der EXE kompiliert wurde. A DLL kann einzeln aktualisiert werden, ohne die EXE selbst zu aktualisieren.

Laden einer DLL:

Ein Programm lädt eine DLL beim Start über die Win32 API LoadLibrary oder wenn es eine Abhängigkeit von einer anderen DLL ist. Ein Programm verwendet die GetProcAddress zum Laden einer Funktion oder LoadResource zum Laden einer Ressource.

Weiterführende Literatur:

Bitte überprüfen Sie MSDN oder Wikipedia für weitere Informationen. Auch die Quellen dieser Antwort.

254
Brian R. Bondy

Was ist eine DLL?

DLL-Dateien sind Binärdateien, die ausführbaren Code und Ressourcen wie Bilder usw. enthalten können. Im Gegensatz zu Anwendungen können diese nicht direkt ausgeführt werden. Eine Anwendung lädt sie jedoch nach Bedarf (oder alle gleichzeitig während des Startvorgangs).

Sind sie wichtig?

Die meisten Anwendungen laden die DLL -Dateien, die sie beim Start benötigen. Wenn eines dieser Elemente nicht gefunden wird, kann das System den Vorgang überhaupt nicht starten.

DLL-Dateien erfordern möglicherweise andere DLL-Dateien

Ebenso wie eine Anwendung eine DLL-Datei benötigt, kann eine DLL-Datei von anderen DLL-Dateien selbst abhängig sein. Wenn eine dieser DLL Dateien in der Abhängigkeitskette nicht gefunden wird, wird die Anwendung nicht geladen. Dies lässt sich leicht mit Hilfe von Tools für Abhängigkeits-Walker wie Abhängigkeits-Walker debuggen.

Es gibt so viele von ihnen in den Systemordnern

Der größte Teil der Systemfunktionalität ist für ein Benutzerprogramm in Form von DLL -Dateien verfügbar, da dies eine Standardform für die gemeinsame Nutzung von Code/Ressourcen ist. Jede Funktionalität wird separat in verschiedenen DLL Dateien gespeichert, sodass nur die erforderlichen DLL Dateien geladen werden und somit die Speicherbeschränkungen auf dem System verringert werden.

Installierte Anwendungen verwenden auch DLL-Dateien

DLL-Dateien werden auch zu einer Form der physischen Trennung von Funktionen, wie oben erläutert. Gute Anwendungen versuchen auch, die DLL -Dateien erst dann zu laden, wenn sie unbedingt erforderlich sind, wodurch sich der Speicherbedarf verringert. Auch dies führt dazu, dass Anwendungen mit vielen DLL Dateien ausgeliefert werden.

DLL Hell

Manchmal führen Systemaktualisierungen jedoch zu Problemen mit anderen Programmen, wenn zwischen den gemeinsam genutzten DLL -Dateien und dem Programm, das sie benötigt, ein Versionskonflikt besteht. Systemprüfpunkte und DLL Cache usw. waren die Initiativen von M $, um dieses Problem zu lösen. Auf der .NET-Plattform tritt dieses Problem möglicherweise überhaupt nicht auf.

Woher wissen wir, was in einer DLL-Datei enthalten ist?

Sie müssen ein externes Tool wie DUMPBIN oder Dependency Walker verwenden, das nicht nur anzeigt, welche öffentlich sichtbaren Funktionen (sogenannte Exporte) im DLL -Dateien und auch welche anderen DLL -Dateien benötigt werden und von welchen Exporten aus diesen DLL -Dateien diese DLL -Datei abhängt.

Wie erstellen/verwenden wir sie?

Weitere Informationen finden Sie in der Programmierungsdokumentation Ihres Herstellers. Informationen zu C++ finden Sie unter LoadLibrary in MSDN.

33
computinglife

Angenommen, Sie erstellen eine ausführbare Datei, die einige Funktionen einer Bibliothek verwendet.

Wenn die von Ihnen verwendete Bibliothek statisch ist, kopiert der Linker den Objektcode für diese Funktionen direkt aus der Bibliothek und fügt sie in die ausführbare Datei ein.

Wenn diese ausführbare Datei ausgeführt wird, verfügt sie über alles, was sie benötigt. Der ausführbare Loader lädt sie also einfach in den Arbeitsspeicher und führt sie aus.

Wenn die Bibliothek dynamisch ist, fügt der Linker keinen Objektcode ein, sondern einen Stub, der besagt, dass sich diese Funktion in dieser [~ # ~] dll [~ # ~] befindet. an dieser Stelle.

Wenn diese ausführbare Datei ausgeführt wird, fehlen Bits der ausführbaren Datei (d. H. Die Stubs), sodass der Loader die ausführbare Datei durchläuft, um die fehlenden Stubs zu reparieren. Erst wenn alle Stubs behoben sind, kann die ausführbare Datei ausgeführt werden.

Um dies in Aktion zu sehen, löschen oder benennen Sie die DLL und beobachten Sie, wie der Loader einen fehlenden DLL Fehler meldet, wenn Sie versuchen, die ausführbare Datei auszuführen.

Daher der Name Dynamic Link Library, Teile des Verknüpfungsprozesses werden vom ausführbaren Loader zur Laufzeit dynamisch ausgeführt.

Ein letzter Hinweis: Wenn Sie keine Verknüpfung zu DLL erstellen, werden vom Linker keine Stubs eingefügt, aber Windows bietet weiterhin die API GetProcAddress an, die es Ihnen ermöglicht Zum Laden und Ausführen der DLL Funktionseinstiegspunkt lange nachdem die ausführbare Datei gestartet wurde.

12
jussij

DLLs (Dynamic Link Libraries) und SLs (Shared Libraries, äquivalent zu UNIX) sind nur Bibliotheken mit ausführbarem Code, die zum Zeitpunkt des Ladens dynamisch in eine ausführbare Datei eingebunden werden können.

Statische Bibliotheken werden zur Kompilierungszeit in eine ausführbare Datei eingefügt und sind ab diesem Zeitpunkt festgelegt. Sie vergrößern die ausführbare Datei und können nicht freigegeben werden.

Dynamische Bibliotheken bieten folgende Vorteile:

1/Sie werden nicht zur Kompilierungszeit, sondern zur Laufzeit geladen, sodass sie unabhängig von der ausführbaren Datei aktualisiert werden können (all die ausgefallenen Fenster und Dialogfelder, die Sie in Windows sehen, stammen aus DLLs, sodass sich das Erscheinungsbild Ihrer Anwendung ohne Sie ändern kann umschreiben müssen).

2/Da der Code unabhängig ist, kann er von mehreren ausführbaren Dateien gemeinsam genutzt werden. Dies spart Speicherplatz, da bei der Ausführung von 100 Apps mit einer einzigen DLL möglicherweise nur eine Kopie des DLL in vorhanden ist Erinnerung.

Ihr Hauptnachteil ist der Vorteil Nr. 1: Wenn sich DLLs unabhängig von Ihrer Anwendung ändern, kann dies dazu führen, dass Ihre Anwendung nicht mehr funktioniert oder sich auf bizarre Weise verhält. Die DLL -Versionierung wird unter Windows in der Regel nicht sehr gut verwaltet, und dies führt zu der urkomischen "DLL-Hölle".

11
paxdiablo

DLL-Dateien enthalten eine Exporttabelle , bei der es sich um eine Liste von Symbolen handelt, nach denen das aufrufende Programm suchen kann. Die Symbole sind typischerweise Funktionen mit der C-Aufrufkonvention ( __ stcall ). Die Exporttabelle enthält auch die Adresse der Funktion.

Mit diesen Informationen kann das aufrufende Programm dann die Funktionen innerhalb der DLL aufrufen, obwohl es zum Zeitpunkt der Kompilierung keinen Zugriff auf die DLL hatte.

Einführung in Dynamic Link Libraries enthält weitere Informationen.

10
Adam Pierce

http://support.Microsoft.com/kb/815065

A DLL ist eine Bibliothek, die Code und Daten enthält, die von mehreren Programmen gleichzeitig verwendet werden können. In Windows-Betriebssystemen ist beispielsweise die Datei Comdlg32 DLL === Führt allgemeine Dialogfeldfunktionen aus. Daher kann jedes Programm die in diesem DLL enthaltenen Funktionen verwenden, um ein Dialogfeld "Öffnen" zu implementieren. Dies fördert die Wiederverwendung von Code und die effiziente Speichernutzung.

Durch die Verwendung einer DLL kann ein Programm in separate Komponenten modularisiert werden. Beispielsweise kann ein Abrechnungsprogramm modulweise verkauft werden. Jedes Modul kann zur Laufzeit in das Hauptprogramm geladen werden, wenn dieses Modul installiert ist. Da die Module getrennt sind, ist die Ladezeit des Programms kürzer und ein Modul wird nur geladen, wenn diese Funktionalität angefordert wird.

Darüber hinaus können Aktualisierungen einfacher auf jedes Modul angewendet werden, ohne dass andere Teile des Programms davon betroffen sind. Beispielsweise haben Sie möglicherweise ein Abrechnungsprogramm und die Steuersätze ändern sich jedes Jahr. Wenn diese Änderungen in einer DLL isoliert sind, können Sie ein Update anwenden, ohne das gesamte Programm neu erstellen oder installieren zu müssen.

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

6
Jorge Ferreira

DLL ist eine Dateierweiterung und bekannt als "Dynamic Link Library" -Dateiformat, das zum Speichern mehrerer Codes und Prozeduren für Windows-Programme verwendet wird. Software & Games wird auf der Basis von DLL Files; DLL Files erstellt, damit mehrere Anwendungen ihre Informationen gleichzeitig nutzen können.

Wenn Sie weitere Informationen zu DLL Dateien oder Fehlern erhalten möchten, lesen Sie den folgenden Beitrag. https://www.bouncegeek.com/fix-dll-errors-windows- 586985 /

2
Akshya Nagar

DLLs (Dynamic Link Libraries) enthalten Ressourcen, die von einer oder mehreren Anwendungen oder Diensten verwendet werden. Sie können Klassen, Symbole, Zeichenfolgen, Objekte, Schnittstellen und so ziemlich alles enthalten, was ein Entwickler außer einer Benutzeroberfläche speichern müsste.

1
tsilb