Was ist das Dateiformat von DLL?
DLL-Datei (Dynamic Linkable Library) ist eine Datei, die nicht alleine ausgeführt werden kann. Sie ermöglicht es Programmen, Code und andere Ressourcen zu teilen, die für die Ausführung spezieller Aufgaben erforderlich sind.
Es werden relativ große Anwendungen erstellt Viele Module erfüllen relativ unabhängige Funktionen. Sie arbeiten zusammen, um die Arbeit des gesamten Softwaresystems zu vervollständigen. Möglicherweise gibt es einige Module, deren Funktionen allgemeiner sind und dennoch beim Aufbau anderer Softwaresysteme verwendet werden. Wenn beim Erstellen eines Softwaresystems der Quellcode aller Module statisch in die gesamte EXE-Datei der Anwendung kompiliert wird, treten einige Probleme auf: Ein Nachteil besteht darin, dass dadurch die Größe der Anwendung zunimmt, wodurch mehr Speicherplatz beansprucht wird und das Programm ausgeführt wird Außerdem wird viel Speicherplatz verbraucht, was zu einer Verschwendung von Systemressourcen führt. Ein weiterer Nachteil besteht darin, dass beim Schreiben eines großen EXE-Programms bei jeder Änderung und Neuerstellung alle Quellcodes angepasst und kompiliert werden müssen, was die Komplexität erhöht Der Kompilierungsprozess ist auch für gestaffelte Unit-Tests nicht förderlich.
Die Windows-Systemplattform bietet eine völlig andere und effektivere Programmier- und Ausführungsumgebung. Sie können unabhängige Programmmodule als kleinere DLL-Dateien erstellen und diese separat kompilieren und testen. Zur Laufzeit lädt das System diese DLL-Module nur dann in den Speicherbereich, wenn das EXE-Programm sie wirklich aufrufen möchte. Dieser Ansatz reduziert nicht nur die Größe der EXE-Datei und den Speicherplatzbedarf, sondern ermöglicht auch die gleichzeitige Nutzung dieser DLL-Module durch mehrere Anwendungen. Windows selbst implementiert einige wichtige Systemfunktionen in Form von DLL-Modulen.
Im Allgemeinen ist eine DLL eine Festplattendatei mit den Erweiterungen .dll, .DRV, .FON, .SYS und vielen .EXE. Es besteht aus globalen Daten, Servicefunktionen und Ressourcen. Es wird zur Laufzeit vom System in den virtuellen Raum des aufrufenden Prozesses geladen und wird Teil des aufrufenden Prozesses. Wenn keine Konflikte mit anderen DLLs vorliegen, wird die Datei normalerweise derselben Adresse im virtuellen Raum des Prozesses zugeordnet. Das DLL-Modul enthält verschiedene exportierte Funktionen zur Bereitstellung von Diensten nach außen. Eine DLL kann über ein eigenes Datensegment verfügen, verfügt jedoch nicht über einen eigenen Stapelmodus, da die Anwendung, die sie aufruft, nur eine Instanz im Speicher hat hängt mit der spezifischen Programmiersprache zusammen. Es hat nichts mit dem Compiler zu tun.
In einer Win32-Umgebung kopiert jeder Prozess seine eigenen globalen Lese-/Schreibvariablen. Wenn Sie Speicher mit anderen Prozessen teilen möchten, müssen Sie eine Speicherzuordnungsdatei verwenden oder ein gemeinsam genutztes Datensegment deklarieren. Der von DLL-Modulen benötigte Stapelspeicher wird vom Stapel des laufenden Prozesses zugewiesen. Windows ordnet Prozessfunktionsaufrufe den exportierten Funktionen der DLL-Datei zu, wenn es ein DLL-Modul lädt. Der Betrieb des Windows-Betriebssystems auf der DLL besteht lediglich darin, die DLL dem virtuellen Adressraum des Prozesses zuzuordnen, der sie benötigt. Alle Objekte (einschließlich Variablen), die durch Code innerhalb einer DLL-Funktion erstellt werden, gehören dem Thread oder Prozess, der sie aufruft.
Aufrufmethode:
1. Statische Aufrufmethode: Das Kompilierungssystem schließt das Laden der DLL und die Kodierung des DLL-Entladens ab, wenn die Anwendung endet (falls vorhanden). Wenn andere Programme diese DLL verwenden, verringert Windows den Anwendungsdatensatz der DLL um 1 und gibt ihn erst frei, wenn alle zugehörigen Programme die DLL nicht mehr verwenden. Dies ist einfach und praktisch, aber nicht flexibel genug und kann nur allgemeine Anforderungen erfüllen Anforderungen. Impliziter Aufruf: Die beim Generieren der dynamischen Linkbibliothek generierte .LIB-Datei muss dem Anwendungsprojekt hinzugefügt werden. Wenn Sie die Funktionen in der DLL verwenden möchten, müssen Sie nur erklären, dass für den impliziten Aufruf kein Aufruf von LoadLibrary( erforderlich ist. ) und FreeLibrary(). Wenn ein Programmierer eine DLL-Datei erstellt, generiert der Linker automatisch eine entsprechende LIB-Importdatei. Diese Datei enthält den symbolischen Namen und die optionale Identifikationsnummer jeder exportierten DLL-Funktion Die LIB-Datei wird als Ersatzdatei für die DLL in das Anwendungsprojekt kompiliert. Wenn der Programmierer die Anwendung durch statische Verknüpfung kompiliert, stimmen die aufrufenden Funktionen in der Anwendung mit den exportierten Symbolen in der LIB-Datei überein Die generierte EXE-Datei enthält auch den entsprechenden DLL-Dateinamen (jedoch nicht den vollständigen Pfadnamen), und der Linker speichert ihn in der EXE-Datei. Wenn eine Anwendung eine DLL-Datei laden muss, erkennt und lädt Windows Basierend auf diesen Informationen wird die DLL-Funktion dynamisch über den Symbolnamen oder die Identifikationsnummer verknüpft. Alle von der Anwendung aufgerufenen DLL-Dateien werden in den Speicher geladen Datei (.LIB-Datei), die die Ausgabefunktionsinformationen der DLL enthält. Die Ausgabefunktion und die aufrufende Methode sind die gleichen wie bei anderen Funktionen innerhalb des Programms . Dynamische Aufrufmethode: Der Programmierer verwendet API-Funktionen zum Laden und Entladen der DLL, was komplizierter zu verwenden ist, aber den Speicher effizienter nutzen kann und eine wichtige Möglichkeit zum Programmieren großer Anwendungen darstellt >.
Expliziter Aufruf:
bezieht sich auf die Verwendung von LoadLibrary oder AfxLoadLibrary, die von MFC bereitgestellt wird, um die von Ihnen in der Anwendung erstellte dynamische Linkbibliothek explizit aufzurufen. Der Dateiname der dynamischen Linkbibliothek entspricht den oben genannten Parametern zwei Funktionen und verwenden Sie dann GetProcAddress(), um die Funktion abzurufen, die Sie einführen möchten. Von nun an können Sie diese importierte Funktion wie eine benutzerdefinierte Funktion in dieser Anwendung aufrufen. Bevor die Anwendung beendet wird, sollte die Dynamic Link Library mithilfe der von MFC bereitgestellten FreeLibrary oder AfxFreeLibrary freigegeben werden. Rufen Sie die Win32-LoadLibary-Funktion direkt auf und geben Sie den Pfad zur DLL als Parameter an. LoadLibary gibt den HINSTANCE-Parameter zurück, den die Anwendung beim Aufrufen der GetProcAddress-Funktion verwendet. Die Funktion GetProcAddress wandelt einen symbolischen Namen oder eine Identifikationsnummer in eine Adresse innerhalb der DLL um. Der Programmierer kann entscheiden, wann eine DLL-Datei geladen wird oder nicht. Die explizite Verknüpfung bestimmt, welche DLL-Datei zur Laufzeit geladen wird. Programme, die DLL verwenden, müssen vor der Verwendung die DLL laden (LoadLibrary), um ein Handle für das DLL-Modul zu erhalten, und dann die Funktion GetProcAddress aufrufen, um den Zeiger der Ausgabefunktion zu erhalten. Die DLL muss vor dem Beenden entladen werden (FreeLibrary).
Da sich DLLs durch geringe Speichernutzung und einfache Bearbeitung auszeichnen, sind viele Computerviren Dateien im DLL-Format. Aber es kann nicht alleine betrieben werden.
Dynamische Linkbibliotheken können normalerweise nicht direkt ausgeführt werden und keine Nachrichten empfangen. Dabei handelt es sich um unabhängige Dateien, die Funktionen enthalten, die von einem ausführbaren Programm oder einer anderen DLL aufgerufen werden können, um einen bestimmten Auftrag auszuführen. Es funktioniert nur, wenn andere Module Funktionen in der Dynamic Link Library aufrufen.
Das obige ist der detaillierte Inhalt vonWas ist das Dateiformat der DLL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!