Frage

Wie genau DLL-Dateien arbeiten? Es scheint eine ganze Menge von ihnen zu sein, aber ich weiß nicht, was sie sind oder wie sie funktionieren.

Also, was ist der Deal mit ihnen?

War es hilfreich?

Lösung

Was ist eine DLL?

Dynamic Link Libraries (DLL) s sind wie EXE-Dateien, aber sie sind nicht direkt ausführbar. Sie sind ähnliche Dateien in Linux / Unix .so. Das heißt, DLLs sind MS-Implementierung von Shared Libraries.

DLLs sind so viel wie eine EXE-Datei, die das Dateiformat selbst ist das gleiche. Sowohl EXE und DLLs auf dem Portable Executable (PE) Dateiformat basiert. DLLs können auch COM-Komponenten und .NET-Bibliotheken enthalten.

Was ist eine DLL enthalten?

Eine DLL enthält Funktionen, Klassen, Variablen, UIs und Ressourcen (wie Icons, Bilder, Dateien, ...), dass eine EXE-Datei oder eine andere DLL verwendet.

Arten von Bibliotheken:

Auf nahezu allen Betriebssystemen gibt es zwei Arten von Bibliotheken. Statische Bibliotheken und dynamische Bibliotheken. In Windows sind die Dateierweiterungen wie folgt: Statische Bibliotheken (LIB) und dynamische Bibliotheken (DLL). Der wesentliche Unterschied besteht darin, dass statische Bibliotheken zu der ausführbaren Datei während der Kompilierung verbunden sind; während dynamisch gelinkte Bibliotheken bis zur Laufzeit nicht miteinander verbunden sind.

Mehr zu statischen und dynamischen Bibliotheken:

Sie sehen nicht, normalerweise statische Bibliotheken obwohl auf Ihrem Computer, da eine statische Bibliothek direkt innerhalb eines Moduls eingebettet ist (EXE oder DLL). Eine dynamische Bibliothek ist eine Stand-alone-Datei.

Eine DLL kann jederzeit geändert werden und wird erst zur Laufzeit geladen, wenn eine EXE explizit die DLL lädt. Eine statische Bibliothek kann nicht geändert werden, sobald sie innerhalb der EXE kompiliert wird. Eine DLL kann einzeln aktualisiert werden, ohne dass die Aktualisierung der EXE selbst.

Laden einer DLL:

Ein Programm lädt eine DLL beim Start über den Win32-API Loadlibrary, oder wenn es eine Abhängigkeit von anderer DLL ist. Ein Programm verwendet die GetProcAddress eine Funktion oder Load zu laden, eine Ressource zu laden.

Lesen Sie auch:

Bitte überprüfen Sie MSDN oder Wikipedia zur weiteren Lektüre. Auch die Quellen dieser Antwort.

Andere Tipps

Was ist eine DLL?

DLL-Dateien sind Binär-Dateien, die ausführbaren Code und Ressourcen wie Bilder enthalten kann, usw. Im Gegensatz zu Anwendungen, können diese nicht direkt ausgeführt werden, sondern eine Anwendung lädt sie wie und wann sie benötigt werden (oder alle auf einmal bei der Inbetriebnahme).

Sind sie wichtig?

Die meisten Anwendungen werden die DLL-Dateien, die sie beim Start benötigen laden. Wenn eines oder mehrere dieser das System nicht in der Lage, um den Prozess zu starten überhaupt nicht gefunden.

DLL-Dateien möglicherweise andere DLL-Dateien benötigen

In der gleichen Weise, dass eine Anwendung eine DLL-Datei benötigt, kann eine DLL-Datei auf anderen DLL-Dateien selbst abhängig sein. Wenn eine dieser DLL-Dateien in der Kette der Abhängigkeit nicht gefunden wird, wird die Anwendung nicht geladen werden. Dies wird gedebuggt leicht alle Dependency Walker-Tools, wie Dependency Walker .

Es gibt so viele von ihnen in den Systemordner

Die meisten der Systemfunktionalität in Form von DLL-Dateien in ein Anwenderprogramm ausgesetzt, da sie eine Standardform des Teilens Code / Ressourcen sind. Jede Funktion wird separat in verschiedenen DLL-Dateien gehalten, so dass nur die benötigten DLL-Dateien geladen werden und somit die Speichereinschränkungen auf dem System reduzieren.

Installierte Anwendungen auch verwenden DLL-Dateien

DLL-Dateien wird auch eine Form Funktionalitäten physisch der Trennung wie oben erläutert. Gute Anwendungen versuchen, auch nicht die DLL-Dateien geladen werden, bis sie absolut notwendig sind, was die Speicheranforderungen reduziert. Auch dies führt zu Anwendungen mit einer Menge von DLL-Dateien zu versenden.

DLL-Hölle

Doch manchmal System-Upgrades oft andere Programme bricht, wenn ein Versionskonflikt zwischen den gemeinsam genutzten DLL-Dateien und das Programm, das sie benötigt. Prüfpunkte für das System und DLL-Cache usw. haben die Initiativen von M $, dieses Problem zu lösen. Die .NET-Plattform könnte dieses Problem nicht stellt überhaupt.

Wie können wir wissen, was in einer DLL-Datei ist?

Sie haben ein externes Tool verwenden, wie DUMPBIN oder Dependency Walker, die nicht nur zeigen, was öffentlich sichtbare Funktionen (wie die Exporte bekannt) innerhalb der DLL-Dateien enthalten und auch andere DLL-Dateien es, was erfordert und die von den DLL-Dateien dieser DLL-Datei exportiert abhängig ist.

Wie schaffen wir / sie verwenden?

Siehe die Programmierung Dokumentation von Ihrem Lieferanten. Für C ++ finden Sie unter Loadlibrary in MSDN.

Angenommen, Sie haben eine ausführbare Datei machen, das einige Funktionen in einer Bibliothek gefunden verwendet.

Wenn die Bibliothek, die Sie verwenden, ist statisch , der Linker den Objektcode für diese Funktionen direkt aus der Bibliothek und fügen Sie sie in die ausführbare Datei kopieren.

Nun, wenn diese ausführbare Datei ausgeführt wird, hat es alles, was es braucht, damit die ausführbaren Loader lädt es nur in dem Speicher und führt es aus.

Wenn die Bibliothek dynamische der Linker nicht Objektcode einzufügen, sondern es wird ein Stub einfügen, die im Grunde sagt, diese Funktion in diesem befindet sich DLL an dieser Stelle.

Nun, wenn diese ausführbare Datei ausgeführt wird, Bits der ausführbaren Datei fehlen (das heißt den Stubs), so der Lader geht durch die ausführbare Datei, die fehlende Stubs bis zur Festsetzung. Erst nachdem alle Stubs gelöst wurden, wird die ausführbare Datei erlaubt sein zu laufen.

Um dies in Aktion löschen oder die DLL umbenennen und beobachtet, wie der Lader einen fehlenden DLL-Fehler melden, wenn Sie versuchen, die ausführbare Datei auszuführen.

Daher auch der Name Dynamic Link Library , Teile des Verknüpfungsvorgang wird dynamisch zur Laufzeit durch die ausführbaren Lader erfolgen.

Eine abschließende Bemerkung, wenn Sie einen Link nicht auf die DLL dann keine Stubs durch den Linker eingesetzt werden, aber Windows bietet immer noch die GetProcAddress API, die Sie eine Ausführungs die DLL zu laden, Funktion Einstiegspunkt, lange nachdem die ausführbare Datei gestartet wird.

DLLs (Dynamic Link Libraries) und SLS (gemeinsam benutzten Bibliotheken, äquivalent unter UNIX) sind nur Bibliotheken von ausführbarem Code, der dynamisch in eine ausführbare Datei zum Ladezeitpunkt verknüpft werden können.

Statische Bibliotheken werden in eine ausführbare Datei während der Kompilierung eingesetzt und von diesem Punkt fixiert. Sie erhöhen die Größe der ausführbaren Datei und kann nicht mit anderen geteilt werden.

Dynamische Bibliotheken haben die folgenden Vorteile:

1 / Sie werden zur Laufzeit geladen, anstatt Zeit zu kompilieren, so dass sie unabhängig von der ausführbaren Datei aktualisiert werden können (alle diese Phantasie Fenster und Dialogfelder in Windows kommen sehen, von DLLs so das Look-and-Feel Ihrer Anwendung können ändern, ohne dass Sie es neu zu schreiben).

2 / Weil sie unabhängig sind, kann der Code über mehrere ausführbare Dateien gemeinsam genutzt werden. - dies spart Speicherplatz, da, wenn Sie 100 Anwendungen mit einer einzigen DLL ausführen, da nur eine Kopie der DLL im Speicher sein kann

Ihr Hauptnachteil ist, Vorteil # 1 - mit DLLs ändern unabhängig Ihre Anwendung Ihrer Anwendung arbeiten zu stoppen verursachen kann oder starten in einer bizarren Art und Weise verhalten. DLL Versionierung ist in der Regel nicht sehr gut unter Windows verwaltet werden und dies führt zu dem quaintly Namen „DLL Hell“.

DLL-Dateien enthalten eine Tabelle exportieren , die eine Liste von Symbolen ist, die durch das rufende Programm nachgeschlagen werden kann. Die Symbole sind Funktionen in der Regel mit der C-Aufrufkonvention ( __ stcall ). Die Export-Tabelle enthält auch die Adresse der Funktion.

Mit dieser Information kann das aufrufende Programm kann dann die Funktionen aufrufen, in der DLL, obwohl es keinen Zugriff auf die DLL bei der Kompilierung hatte.

Einführung in Dynamic Link Bibliotheken hat einige weitere Informationen.

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

  

Eine DLL ist eine Bibliothek, die Code enthält   und Daten, die von mehr verwendet werden kann als   ein Programm zur gleichen Zeit. Zum   beispielsweise in Windows-Betriebssystemen,   die Comdlg32 DLL führt gemeinsam   Dialogfeld bezogene Funktionen.   Daher kann jedes Programm die   Funktionalität, die in enthalten ist   Diese DLL einen offenen Dialog zu implementieren   Box. Dies hilft, die Wiederverwendung von Code zu fördern und   effiziente Speichernutzung.

     

Durch eine DLL verwendet wird, kann ein Programm sein,   modularisiert in getrennte Komponenten.   Zum Beispiel kann ein Buchhaltungsprogramm   wird durch das Modul verkauft. Jedes Modul kann sein   geladen in das Hauptprogramm zum Laufe   Zeit, wenn das Modul installiert ist.   Da die Module sind getrennt, die   Ladezeit des Programms ist es schneller,   und ein Modul wird nur geladen, wenn das   Funktionalität angefordert wird.

     

Darüber hinaus Updates sind einfacher zu   Jedes Modul gilt ohne Beeinträchtigung   andere Teile des Programms. Zum   Beispielsweise können Sie eine Abrechnung haben   Programm, und die Steuersätze jeder Änderung   Jahr. Wenn diese Änderungen getrennt sind   zu einer DLL, können Sie ein Update installieren   ohne dass bauen oder installieren   das gesamte Programm wieder.

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

DLL ist eine Dateierweiterung und bekannt als „Dynamic Link Library“ Dateiformat für mehrere Codes und Verfahren für die Windows-Programme zu halten. Software läuft auf der Basis von DLL-Dateien; DLL-Dateien erstellt wurden, so dass mehrere Anwendungen, um ihre Informationen zur gleichen Zeit nutzen könnten.

Wenn Sie weitere Informationen über DLL-Dateien oder mit Blick auf einen Fehler lesen Sie die folgenden Post erhalten möchten. https://www.bouncegeek.com/fix-dll-errors-windows -586.985 /

DLLs (Dynamic Link Libraries) enthalten Ressourcen, die von einem oder mehreren Anwendungen oder Dienste. Sie können enthalten Klassen, Symbole, Strings, Objekte, Schnittstellen, und so ziemlich alles, was ein Entwickler mit Ausnahme einer Benutzeroberfläche speichern müßte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top