Select the product you need help with
Was ist eine DLL?Artikel-ID: 815065 - Produkte anzeigen, auf die sich dieser Artikel bezieht Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base: 815065
(http://support.microsoft.com/kb/815065/EN-US/
)
What is a DLL?Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung. Auf dieser SeiteZusammenfassung
Der vorliegende Artikel erläutert, was eine DLL (Dynamic Link Library) ist, und beschreibt die verschiedenen Probleme, die bei der Verwendung von DLLs auftreten können. Darüber hinaus nennt der Artikel weitere Anforderungen, die Sie bei der Erstellung eigener DLLs berücksichtigen sollten. Neben der Definition des Begriffs DLL werden Methoden für dynamisches Verknüpfen, DLL-Abhängigkeiten und DLL-Einstiegspunkte sowie das Exportieren von DLL-Funktionen und DLL-Problembehandlungstools näher erläutert. Außerdem finden Sie am Ende des Artikels einen allgemeinen Vergleich der Funktionen von Microsoft .NET Framework-Assemblys und DLLs. EinführungBei den im Abschnitt "Die Informationen in diesem Artikel
beziehen sich auf" aufgeführten Microsoft Windows-Betriebssystemen wird die
Betriebssystemfunktionalität größtenteils über DLLs (Dynamic Link Libraries)
bereitgestellt. Die Funktionalität von Programmen, die Sie auf einem dieser
Windows-Betriebssysteme ausführen, wird eventuell ebenfalls über DLLs
bereitgestellt. Programme können viele verschiedene Module beinhalten. Die
einzelnen Module sind in DLLs enthalten und werden über diese
verteilt. Die Verwendung von DLLs trägt zur Modularisierung und Wiederverwendung des Codes bei, ermöglicht eine effizientere Nutzung des Speichers und sorgt so dafür, dass weniger Speicherplatz belegt wird. Betriebssystem und Programme können so schneller geladen und ausgeführt werden und nehmen weniger Festplattenspeicherplatz auf dem Computer ein. Wenn ein Programm eine DLL verwendet, können so genannte "Abhängigkeiten" dazu führen, dass das Programm nicht ausgeführt wird. Eine Abhängigkeit wird hergestellt, wenn ein Programm eine DLL verwendet. Überschreibt ein anderes Programm diese DLL und hebt damit die Abhängigkeit auf, kann das ursprüngliche Programm nicht mehr erfolgreich ausgeführt werden. Mit der Einführung von Microsoft .NET Framework und durch die Verwendung von Assemblys konnten die meisten Abhängigkeitsprobleme behoben werden. Weitere InformationenWas ist eine DLL?Eine DLL ist eine Bibliothek, die Code und Daten enthält. Sie kann von mehreren Programmen gleichzeitig verwendet werden. In Windows-Betriebssystemen führt die DLL "Comdlg32" beispielsweise häufig verwendete dialogfeldbezogene Funktionen aus. Daher kann jedes Programm die in dieser DLL enthaltene Funktionalität zur Implementierung eines Öffnen-Dialogfeldes verwenden. Dies trägt zur Wiederverwendung des Codes sowie zu einer effizienten Speichernutzung bei.Mithilfe von DLLs lässt sich ein Programm in separate Komponenten (so genannte Module) aufgliedern. Ein Buchführungsprogramm kann beispielsweise in einzelnen Modulen angeboten werden. Diese lassen sich zur Laufzeit in das Hauptprogramm laden, sofern sie installiert sind. Da es sich um separate Module handelt, wird das Programm schneller geladen. Das Laden der jeweiligen Module erfolgt nur dann, wenn die entsprechende Funktionalität benötigt wird. Außerdem können Aktualisierungen einfacher auf die einzelnen Module angewendet werden, ohne dass sich dies auf andere Teile des Programms auswirkt. Beispiel: Sie besitzen ein Lohn- und Gehaltsprogramm, und die Steuersätze ändern sich jährlich. Wenn diese Änderungen in einer DLL isoliert werden, können Sie ein Update einbringen, ohne das Programm vollständig neu erstellen oder installieren zu müssen. Die folgende Liste zählt einige der Dateien auf, die in Windows-Betriebssystemen als DLLs implementiert werden:
Vorteile von DLLsNachfolgend werden einige der Vorteile aufgelistet, die die Verwendung von DLLs durch Programme bietet:
DLL-AbhängigkeitenWenn ein Programm oder eine DLL eine DLL-Funktion einer anderen DLL verwendet, entsteht eine Abhängigkeit. Das Programm ist daher nicht mehr eigenständig, und es können Probleme auftreten, wenn die Abhängigkeit aufgehoben wird. Das Programm wird eventuell nicht ausgeführt, wenn einer der folgenden Vorgänge stattfindet:
Im Folgenden werden die Änderungen aufgelistet, die in Microsoft Windows 2000 und höheren Windows-Betriebssystemen eingeführt wurden, um Abhängigkeitsprobleme zu verhindern:
DLL-ProblembehandlungstoolsZur Behebung von DLL-Problemen stehen verschiedene Tools zur Verfügung. Hierzu gehören:Dependency WalkerDas Tool Dependency Walker ist in der Lage, eine rekursive Suche nach allen abhängigen DLLs durchzuführen, die von einem Programm verwendet werden. Wenn Sie ein Programm in Dependency Walker öffnen, führt das Tool die folgenden Prüfungen durch:
Laufwerk\Programme\Microsoft Visual Studio\Common\Tools DLL Universal Problem SolverDas Tool DLL Universal Problem Solver (DUPS) wird zum Überwachen, Vergleichen, Dokumentieren und Anzeigen von DLL-Informationen verwendet. Nachfolgend sind die Dienstprogramme aufgeführt, die zum Tool DUPS gehören:
247957
(http://support.microsoft.com/kb/247957/DE/
)
BEISPIEL: Verwenden von DUPS.exe, um DLL-Kompatibilitätsprobleme zu beheben
DLL-HilfedatenbankIn der DLL-Hilfedatenbank können Sie nach bestimmten Versionen von DLLs suchen, die von Microsoft-Softwareprodukten installiert werden. Weitere Informationen zur DLL-Hilfedatenbank finden Sie auf folgender Website von Microsoft:http://support.microsoft.com/dllhelp/
(http://support.microsoft.com/dllhelp/)
DLL-EntwicklungIn diesem Abschnitt werden die Probleme und Anforderungen erläutert, die Sie beim Entwickeln eigener DLLs berücksichtigen sollten.DLL-TypenWenn Sie eine DLL in einer Anwendung laden, werden die exportierten DLL-Funktionen mithilfe von zwei verschiedenen Verknüpfungsmethoden aufgerufen. Hierbei handelt es sich um Load-Time Dynamic Linking (Dynamische Verknüpfung zum Startzeitpunkt) und Run-Time Dynamic Linking (Dynamische Verknüpfung zur Laufzeit).Load-Time Dynamic LinkingBeim Load-Time Dynamic Linking erzeugt die Anwendung explizite Aufrufe an exportierte DLL-Funktionen (wie an lokale Funktionen). Um diese Verknüpfungsmethode zu verwenden, stellen Sie eine Header-Datei (.h) und eine Importbibliothek (.lib) bereit, wenn Sie die Anwendung kompilieren und verknüpfen. Dadurch stellt der Linker dem System die Informationen bereit, die zum Laden der DLL und Auflösen des Standortes der exportierten DLL-Funktionen zum Startzeitpunkt benötigt werden.Run-Time Dynamic LinkingBeim Run-Time Dynamic Linking ruft die Anwendung entweder die Funktion LoadLibrary oder die Funktion LoadLibraryEx auf, um die DLL zur Laufzeit zu laden. Nachdem die DLL erfolgreich geladen wurde, verwenden Sie die Funktion GetProcAddress, um die Adresse der exportierten DLL-Funktion abzurufen, die Sie aufrufen möchten. Bei Verwendung dieser Verknüpfungsmethode benötigen Sie keine Importbibliothek.Nachfolgend werden die Kriterien aufgeführt, nach denen entschieden werden sollte, ob Load-Time Dynamic Linking oder Run-Time Dynamic Linking zu verwenden ist:
DLL-EinstiegspunktWenn Sie eine DLL erstellen, können Sie optional eine Einstiegspunktfunktion angeben. Diese Funktion wird aufgerufen, wenn Prozesse oder Threads sich an eine DLL anfügen oder sich von einer DLL trennen. Sie können die Einstiegspunktfunktion, je nachdem, was die DLL erfordert, zum Initialisieren oder zum Entfernen von Datenstrukturen verwenden. Wenn es sich um eine Multithread-Anwendung handelt, können Sie außerdem den lokalen Threadspeicher (Thread Local Storage, TLS) verwenden, um den einzelnen Threads in der Einstiegspunktfunktion privaten Speicher zuzuweisen. Der folgende Code ist ein Beispiel für eine DLL-Einstiegspunktfunktion.Die Einstiegspunktfunktion sollte nur einfache Initialisierungsaufgaben ausführen. Sie sollte keine anderen DLL-Lade- oder -Abbruchfunktionen aufrufen. Rufen Sie beispielsweise in der Einstiegspunktfunktion nicht direkt oder indirekt die Funktion LoadLibrary oder die Funktion LoadLibraryEx auf. Sie sollten darüber hinaus auch nicht die Funktion FreeLibrary aufrufen, wenn der Prozess beendet wird. Hinweis: Stellen Sie in Multithread-Anwendungen sicher, dass der Zugriff auf die globalen DLL-Daten synchronisiert (threadsicher) ist, um eventuelle Beschädigungen von Daten zu verhindern. Verwenden Sie hierzu TLS, um eindeutige Daten für jeden Thread bereitzustellen. Exportieren von DLL-FunktionenUm DLL-Funktionen zu exportieren, können Sie entweder den exportierten DLL-Funktionen ein Funktionsschlüsselwort hinzufügen oder eine Moduldefinitionsdatei (.def) erstellen, in der die exportierten DLL-Funktionen aufgelistet werden.Wenn Sie ein Funktionsschlüsselwort verwenden möchten, müssen Sie jede Funktion, die Sie exportieren möchten, mit dem folgenden Schlüsselwort deklarieren: __declspec(dllexport) Um exportierte DLL-Funktionen in der Anwendung zu
verwenden, müssen Sie jede Funktion, die Sie importieren möchten, mit dem
folgenden Schlüsselwort deklarieren: __declspec(dllimport) In der Regel verwenden Sie eine Headerdatei mit
einer define-Anweisung und einer ifdef-Anweisung, um die Export- und die Importanweisung voreinander zu
trennen. Sie können auch eine Moduldefinitionsdatei verwenden, um exportierte DLL-Funktionen zu deklarieren. Wenn Sie eine Moduldefinitionsdatei verwenden, müssen Sie den exportierten DLL-Funktionen kein Funktionsschlüsselwort hinzufügen. In der Moduldefinitionsdatei deklarieren Sie die LIBRARY- und die EXPORTS-Anweisung für die DLL. Der folgende Code ist ein Beispiel für eine Definitionsdatei. Beispiel-DLL und -AnwendungIn Microsoft Visual C++ 6.0 können Sie eine DLL erstellen, indem Sie entweder den Projekttyp Win32 Dynamic-Link Library oder den Projekttyp MFC AppWizard (dll) wählen.Der folgende Code ist ein Beispiel für eine DLL, die unter Verwendung des Projekttyps Win32 Dynamic-Link Library in Visual C++ erstellt wurde. Beim Run-Time Dynamic Linking verwenden Sie zum Aufrufen der exportierten DLL-Funktion "SampleDLL.dll" Code, der dem folgenden ähnelt:
Microsoft .NET Framework-AssemblysDurch die Einführung von Microsoft .NET und Microsoft .NET Framework und die Verwendung von Assemblys wurden die meisten der Probleme behoben, die im Zusammenhang mit DLLs auftreten können. Eine Assembly ist eine logische Funktionseinheit, die unter der Steuerung der Common Language Runtime (CLR) von .NET ausgeführt wird. Eine Assembly existiert physisch als DLL-Datei oder als EXE-Datei. Intern unterscheidet sich eine Assembly jedoch stark von einer Microsoft Win32-DLL.Eine Assemblydatei enthält ein Assemblymanifest, Typmetadaten, MSIL-Code (MISL = Microsoft Intermediate Language) und andere Ressourcen. Das Assemblymanifest beinhaltet die Assemblymetadaten. Diese stellen alle Informationen bereit, die erforderlich sind, damit eine Assembly selbstbeschreibend ist. Das Assemblymanifest enthält die folgenden Informationen:
Nachfolgend werden einige der Funktionen von Assemblys den Funktionen von Win32-DLLs gegenübergestellt:
InformationsquellenWeitere Informationen über DLLs und Microsoft .NET
Framework-Assemblys finden Sie auf den folgenden Microsoft-Websites: DLL-Hilfedatenbank http://support.microsoft.com/dllhelp
(http://support.microsoft.com/dllhelp)
DLL-Konflikte http://msdn2.microsoft.com/en-us/library/ms811694.aspx
(http://msdn2.microsoft.com/en-us/library/ms811694.aspx)
Implementierung der parallelen gemeinsamen Nutzung von Komponenten in Anwendungen http://msdn2.microsoft.com/en-us/library/ms811700.aspx
(http://msdn2.microsoft.com/en-us/library/ms811700.aspx)
Erstellung und Wartung isolierter Anwendungen und paralleler Assemblys in Windows XP http://msdn2.microsoft.com/en-us/library/ms997620.aspx
(http://msdn2.microsoft.com/en-us/library/ms997620.aspx)
Einfachere Bereitstellung und Behebung von DLL-Konflikten in .NET Framework http://msdn.microsoft.com/library/en-us/dndotnet/html/dplywithnet.asp
(http://msdn.microsoft.com/library/en-us/dndotnet/html/dplywithnet.asp)
Dokumentation ".NET Framework developer's guide: Assemblies" (.NET Framework-Entwicklerhandbuch: Assemblys) http://msdn.microsoft.com/library/en-us/cpguide/html/cpconassemblies.asp
(http://msdn.microsoft.com/library/en-us/cpguide/html/cpconassemblies.asp)
Run-Time Dynamic Linking http://msdn2.microsoft.com/en-us/library/ms685090.aspx
(http://msdn2.microsoft.com/en-us/library/ms685090.aspx)
Lokaler Threadspeicher (Thread Local Storage, TLS) http://msdn2.microsoft.com/en-us/library/ms686749.aspx
(http://msdn2.microsoft.com/en-us/library/ms686749.aspx)
EigenschaftenArtikel-ID: 815065 - Geändert am: Dienstag, 4. Dezember 2007 - Version: 5.5 Die Informationen in diesem Artikel beziehen sich auf:
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
| SPRACHE AUSWÄHLEN
|


Zum Anfang








