Was ist eine DLL?

90

Dies mag eine sehr noobie Frage sein, aber in der heutigen Welt der Web-App-Entwicklung müssen sich viele Programmierer nicht viel mit DLLs auseinandersetzen und machen sich daher nicht die Mühe, ihren Zweck kennenzulernen.

Was ist eine DLL?

  1. Was wird es verwendet?
  2. Wie funktioniert es?
  3. Wie erstellt man eine?
  4. In welchen Situationen ist es angemessen, eine zu erstellen?

Mir wurde gesagt, dass DLLs zum Speichern von Funktionsbibliotheken verwendet werden, aber darüber hinaus weiß ich nicht viel. Hoffentlich kann mich hier jemand aufklären, damit ich mich endlich nicht mehr fragen kann, was all diese DLL-Dateien in meinem Windows-Verzeichnis tun.

Daniel
quelle
Das Community-Wiki sollte für Fälle verwendet werden, in denen es keine tatsächlichen Antworten auf Ihre Frage gibt. Dies ist eine gültige Frage. Wenn Sie den Community-Wiki-Modus auswählen, verhindern Sie, dass Sie und die Antwortenden in dieser Frage einen Repräsentanten finden.
Cody Brocious
Diese Frage hat das Potenzial, sehr beliebt zu werden
Tamas Czinege
1
Du denkst? Vielleicht für Ansichten, aber nicht für Stimmen ... Wie auch immer, es wurde bereits 4 Mal beantwortet.
Omar Kooheji
2
das ist trivial googleable ...
annakata
3
Yah, das ist googleable, aber ich habe nicht wirklich viele gute prägnante Erklärungen dafür gefunden, besonders für die Frage, wie man eine erstellt und wann es angebracht ist, eine zu verwenden.
Daniel

Antworten:

55

Eine DLL ist eine dynamische Linkbibliothek. Es ist eine Sammlung von Code und / oder Daten, die von mehreren Anwendungen (oder anderen Bibliotheken / Modulen) verwendet werden können.

So werden beispielsweise gängige Methoden zum Verarbeiten von Dateien, Arbeiten mit GUI-Komponenten usw. in Bibliotheken bereitgestellt, sodass mehrere Anwendungen möglicherweise dieselbe Funktionalität verwenden. Dies reduziert nicht nur die Notwendigkeit, dasselbe Material mehrmals zu erstellen, sondern stellt auch sicher, dass z. B. gemeinsame Dialoge zwischen Anwendungen gleich sind.

Bibliotheken können zur Laufzeit geladen und somit von verschiedenen gleichzeitigen Anwendungen gemeinsam genutzt werden. Dies wird als dynamische Verknüpfung bezeichnet.

In einigen Fällen kann die Bibliothek in der Anwendung selbst enthalten sein. Dies wird als statische Verknüpfung bezeichnet. Die statische Verknüpfung erleichtert die Bereitstellung auf Kosten der Flexibilität, da unterschiedliche Anwendungen jeweils dieselbe Kopie der DLL laden.

Eine statische Verknüpfung ist jedoch nicht immer eine Option. Beispielsweise können Sie eine .NET-Anwendung nicht statisch verknüpfen. Der Benutzer muss über die .NET-Bibliotheken verfügen, um eine .NET-Anwendung ausführen zu können, und Bibliotheken (oder Assemblys, wie sie in .NET aufgerufen werden) werden zur Laufzeit geladen.

DLLs werden mit denselben Tools erstellt, die zum Erstellen von Anwendungen verwendet werden. Die spezifischen Details hängen sehr stark von den verwendeten Werkzeugen ab.

Brian Rasmussen
quelle
Vielen Dank für die Antwort. Ich frage mich, woher wissen Anwendungen, welche Funktionen in der DLL verfügbar sind? Die DLL selbst ist alles Maschinencode richtig? Wie werden die öffentlichen Funktionssignaturen in der DLL angezeigt?
Daniel
Ich kenne die meisten Sprachen nicht, aber die automatische Vervollständigung von Visual Studio zeigt Ihnen alle verfügbaren Funktionen.
Grant
1
Aber wie findet Autocomplete heraus, welche Funktionen verfügbar sind, wenn die DLL nur Maschinencode ist?
Daniel
2
Maschinen können Maschinencode lesen. DLLs können Symbole, Zeichenfolgen und Schriftarten enthalten. Vermutlich gibt es irgendwo dort eine Liste dessen, was es enthält.
Grant
1
Visual C ++ enthält ein Tool namens dumpbin. Wenn Sie "dumpbin / export Whatever.dll" ausführen, erfahren Sie, welche Funktionen und Inhalte exportiert werden (dh für Programme, die die DLL laden).
Graeme Perrow
29

DLL = Dynamic Link Library

Der Name ist eigentlich ziemlich beschreibend für das, was sie erreichen.

Bibliothek

Hiermit können Sie Code für eine bestimmte Problemdomäne an einem einzigen Speicherort isolieren. Teilen Sie dies dann für mehrere Anwendungen. Die Bibliothek kann jederzeit gegen eine andere ausgetauscht werden, um Fehler zu beheben oder Funktionen hinzuzufügen.

Verknüpfung

Sie können die Bibliothek mit einer Anwendung "verknüpfen", damit die Logik in der Bibliothek nicht direkt in die Anwendung kompiliert wird.

Dynamisch

Die Bibliothek kann bei Bedarf geladen werden. Anstatt eine riesige einzelne EXE-Datei in den Speicher zu laden, kann das Betriebssystem nur die benötigten Teile laden. Wenn eine DLL von Anwendungen gemeinsam genutzt wird, kann das Betriebssystem das Laden der Bibliothek optimieren und für Apps freigeben.

Paul Alexander
quelle
10

DLL- Dateien (Dynamic Link Library) können als kleine "Unterprogramme" beschrieben werden, die dazu beitragen sollen, dass ein größeres Programm gut läuft. Sie bieten die Möglichkeit, verschiedene Hardware- und Softwareressourcen (zu verschiedenen Zeitpunkten in ihren Laufzeitsitzungen) mit dem ausführbaren Hauptprogramm zu verknüpfen, auf dem sie basieren, und zwar "je nach Bedarf". Dadurch entfällt die Notwendigkeit, alles, was mit dem ausführbaren Hauptprogramm zu tun hat, beim ersten Ausführen des Programms in den RAM (Arbeitsspeicher) des Computers zu laden.

Die von DLLs übertragenen Softwareressourcen enthalten Code für die verschiedenen Programmfunktionen, die nicht wirklich benötigt werden, um das Programm am Laufen zu halten. Dies sind Funktionen, die nur zu bestimmten Zeiten während einer bestimmten Computersitzung aufgerufen werden müssen und möglicherweise gar nicht benötigt werden überhaupt gerufen werden. Das Laden dieser Funktionen (und es kann eine beträchtliche Anzahl von ihnen für ein bestimmtes Programm geben) in den RAM des Computers, wenn das Programm zum ersten Mal ausgeführt wird, und das anschließende Beibehalten dieser Funktionen während der gesamten Sitzung wäre eine Verschwendung von RAM-Speicherplatz - was als vorhanden angesehen wird eine Prämie.

Ein großer Fortschritt:

Die Entwicklung von DLLs war ein großer Fortschritt in der Datenverarbeitung, da alles, was mit einem Programm zu tun hatte (einschließlich Funktionen, die selten oder nie verwendet wurden), beim ersten Laden des Programms in den RAM geladen werden musste, bevor sie verfügbar waren. Dies führte zu einer äußerst ineffizienten Datenverarbeitung mit langsameren Geschwindigkeiten, die von verschiedenen Programmen gezeigt wurden. Aufgrund der damit verbundenen Belastung des Arbeitsspeichers war es auch äußerst schwierig, Multitasking durch Ausführen einiger einfacher Programme durchzuführen.

Überlegungen:

DLLs sind normalerweise versionierungsspezifisch. Diejenigen, die beispielsweise für Version 1 eines Programms (oder gegebenenfalls für eine Programmiersprache) gut funktionieren, funktionieren mit Version 2 möglicherweise nicht gut. Die allgemeine Regel lautet, dass die DLLs in der älteren Version in der Regel nicht funktionieren gut mit der neueren Version, aber die der neueren Version können im Allgemeinen ziemlich gut mit der älteren Version des Programms oder der Programmiersprache funktionieren.

Judy Smith
quelle
7

Dynamisch verknüpfte Bibliothek.

Um Ihnen ein Beispiel zu geben: Wenn Sie die DLL einer anderen Person in Ihre Anwendung geladen haben, können Sie Programmierbits daraus verwenden.

Sie können eine DLL laden, die Zufallszahlen generiert, die immer mit "5" oder so beginnen.

In Ihrem Programm können Sie CrazyDLL.GenerateRandomNumbersSorta () aufrufen und die Nummer wird zurückgegeben.

Für ein Beispiel aus der Praxis habe ich eine DLL, die 4 Textfelder kombiniert (Sie würden diese zum Eingeben von IP-Adressen verwenden) und automatisch nur Zahlen unter 256 akzeptiert und das Drücken der Rücktaste zum Springen zu einem vorherigen Textfeld handhabt.

Ich habe eine DLL mit diesem Code erstellt. Jetzt muss ich nur noch mehr dieser IP-Adress-Textfeldsammlungen ziehen und ablegen, ohne den gesamten Code immer wieder duplizieren zu müssen.

Dieselbe DLL bietet auch Funktionen zum Konvertieren von IP-Adressen in hexadezimale Zeichenfolgen und anderen nützlichen Code.

Grant
quelle
1

Aus der MSDN-Bibliothek :

Eine Dynamic Link Library (DLL) ist ein Modul, das Funktionen und Daten enthält, die von einem anderen Modul (Anwendung oder DLL) verwendet werden können.

Nemanja Trifunovic
quelle
1

DLL = Dynamic Load Link Library. Wie Sie bereits erfahren haben, handelt es sich im Grunde genommen um eine Sammlung von Funktionen, C ++ - Klassen und / oder globalen Variablen. Sie können die DLL statisch (dh das Betriebssystem lädt sie automatisch, wenn Ihr Programm startet) oder dynamisch (Ihr Programm lädt sie explizit) laden. Zu diesem Zeitpunkt stehen Ihrem Programm die Funktionen und Inhalte in der DLL zur Verfügung.

Das Erstellen einer EXE-Datei ähnelt dem Erstellen einer EXE-Datei, außer dass keine main()Funktion vorhanden sein muss. Es gibt Linker-Anweisungen, die den Linker anweisen, eine DLL anstelle einer EXE-Datei zu erstellen.

Der Hauptgrund, warum Sie dies tun möchten, besteht darin, Code an einer Stelle zu kapseln und ihn aus mehreren Exe zu verwenden, anstatt den Code mit jedem zu verknüpfen.

Ein etwas historischer Grund ist, dass Ihre Exe kleiner sein kann, da sich ein Teil des Codes physisch in einer anderen Datei befindet. Dies bedeutet, dass der von Ihrer Exe im Speicher belegte Speicherplatz kleiner sein kann. Auf modernen Systemen ist dies weniger ein Problem als früher, obwohl es unter Windows Mobile immer noch ein Problem sein kann.

Graeme Perrow
quelle