Freigeben über


Erstellung einer Dynamic Link Library

Zum Erstellen einer Dynamic Link Library (DLL) müssen Sie eine oder mehrere Quellcodedateien und möglicherweise eine Linkerdatei zum Exportieren der Funktionen erstellen. Wenn Sie beabsichtigen, Anwendungen zuzulassen, die Ihre DLL verwenden, um dynamische Verknüpfungen während des Ladens zu verwenden, müssen Sie zudem eine Importbibliothek erstellen.

Erstellen von Quelldateien

Die Quelldateien für eine DLL enthalten exportierte und interne Funktionen und Daten sowie eine optionale Funktion als Einstiegspunkt für die DLL. Sie können alle Entwicklungstools verwenden, die die Erstellung von Windows-basierten DLLs unterstützen.

Wenn Ihre DLL möglicherweise von einer Multithread-Anwendung verwendet wird, sollten Sie Ihre DLL „threadsicher“ gestalten. Um eine Datenbeschädigung zu vermeiden, müssen Sie den Zugriff auf alle globalen Daten der DLL synchronisieren. Sie müssen außerdem sicherstellen, dass Sie ausschließlich Verknüpfungen mit threadsicheren Bibliotheken verwenden. Beispielsweise enthält Microsoft Visual C++ mehrere Versionen der C-Runtimebibliothek: eine, die nicht threadsicher ist, und zwei, die threadsicher sind.

Exportieren von Funktionen

Die Angabe der Funktionen, die in einer DLL exportiert werden sollten, hängt von den Tools ab, die Sie für die Entwicklung verwenden. Bei einigen Compilern können Sie eine Funktion direkt im Quellcode exportieren, indem Sie in der Funktionsdeklaration einen Modifizierer verwenden. In anderen Fällen müssen Sie Exporte in einer Datei angeben, die Sie an den Linker übergeben.

Beispielsweise gibt es bei der Verwendung von Visual C++ zwei Möglichkeiten, um DLL-Funktionen zu exportieren: mit dem Modifizierer __declspec(dllexport) oder mit einer Moduldefinitionsdatei (.def). Wenn Sie den Modifizierer __declspec(dllexport) verwenden, ist die Verwendung einer .def-Datei nicht erforderlich. Weitere Informationen finden Sie unter Exportieren aus einer DLL.

Erstellen einer Importbibliothek

Eine Importbibliotheksdatei (.lib) enthält Informationen, die der Linker benötigt, um externe Verweise auf exportierte DLL-Funktionen aufzulösen, damit das System die angegebene DLL und die exportierten DLL-Funktionen zur Laufzeit finden kann. Sie können eine Importbibliothek für Ihre DLL erstellen, wenn Sie Ihre DLL erstellen.

Weitere Informationen finden Sie unter Erstellen einer Importbibliothek und Exportdatei.

Verwenden einer Importbibliothek

Um beispielsweise die CreateWindow-Funktion aufzurufen, müssen Sie den Code mit der User32.lib-Importbibliothek verknüpfen. Der Grund dafür ist, dass sich CreateWindow in einer System-DLL namens User32.dll befindet und User32.lib die Importbibliothek ist, mit der die Aufrufe in Ihrem Code in die exportierten Funktionen in User32.dll aufgelöst werden. Der Linker erstellt eine Tabelle, die die Adresse jedes Funktionsaufrufs enthält. Aufrufe von Funktionen in einer DLL werden beim Laden der DLL festgelegt. Während der Initialisierung des Prozesses wird User32.dll durch das System geladen, weil der Prozess von den exportierten Funktionen in dieser DLL abhängt und das System die Einträge in der Adresstabelle der Funktionen aktualisiert. Alle Aufrufe von CreateWindow rufen die exportierte Funktion aus User32.dll auf.

Weitere Informationen finden Sie unter Verknüpfen einer ausführbaren Datei mit einer DLL.