Freigeben über


Dynamic-Link-Bibliotheksdaten

Eine Dynamic-Link Library (DLL) kann globale Oder lokale Daten enthalten.

Variablenbereich

Variablen, die in einer DLL-Quellcodedatei als global deklariert sind, werden vom Compiler und Linker als globale Variablen behandelt, aber jeder Prozess, der eine bestimmte DLL lädt, erhält eine eigene Kopie der globalen Variablen dieser DLL. Der Bereich statischer Variablen ist auf den Block beschränkt, in dem die statischen Variablen deklariert werden. Daher verfügt jeder Prozess standardmäßig über eine eigene instance der globalen und statischen DLL-Variablen.

Hinweis

Mit Ihren Entwicklungstools können Sie möglicherweise das Standardverhalten überschreiben. Beispielsweise unterstützt der Visual C++-Compiler #pragma Abschnitt und der Linker die Option /SECTION. Weitere Informationen finden Sie in der Dokumentation, die in Ihren Entwicklungstools enthalten ist.

 

Dynamische Speicherbelegung

Wenn eine DLL Arbeitsspeicher mithilfe einer der Speicherbelegungsfunktionen (GlobalAlloc, LocalAlloc, HeapAlloc und VirtualAlloc) zuordnet, wird der Arbeitsspeicher im virtuellen Adressraum des aufrufenden Prozesses zugeordnet und ist nur für die Threads dieses Prozesses zugänglich.

Eine DLL kann die Dateizuordnung verwenden, um Arbeitsspeicher zuzuweisen, der für Prozesse freigegeben werden kann. Eine allgemeine Erläuterung der Verwendung der Dateizuordnung zum Erstellen von benanntem freigegebenem Speicher finden Sie unter Dateizuordnung. Ein Beispiel, das die DllMain-Funktion verwendet, um freigegebenen Arbeitsspeicher mithilfe der Dateizuordnung einzurichten, finden Sie unter Verwenden von freigegebenem Arbeitsspeicher in einer Dynamic-Link Bibliothek.

Threadlokaler Speicher

Die TLS-Funktionen (Thread Local Storage) ermöglichen es einer DLL, einen Index zum Speichern und Abrufen eines anderen Werts für jeden Thread eines Multithreadprozesses zuzuordnen. Beispielsweise kann eine Tabellenkalkulationsanwendung jedes Mal, wenn der Benutzer eine neue Kalkulationstabelle öffnet, eine neue instance desselben Threads erstellen. Eine DLL, die die Funktionen für verschiedene Tabellenkalkulationsvorgänge bereitstellt, kann TLS verwenden, um Informationen zum aktuellen Status der einzelnen Tabellenkalkulationen (Zeile, Spalte usw.) zu speichern. Eine allgemeine Erläuterung des lokalen Threadspeichers finden Sie unter ThreadLokaler Speicher. Ein Beispiel, das die DllMain-Funktion zum Einrichten des lokalen Threadspeichers verwendet, finden Sie unter Verwenden des lokalen Threadspeichers in einer Dynamic-Link Bibliothek.

Windows Server 2003 und Windows XP: Der Visual C++-Compiler unterstützt eine Syntax, mit der Sie threadlokale Variablen deklarieren können: _declspec(thread). Wenn Sie diese Syntax in einer DLL verwenden, können Sie die DLL nicht explizit mit LoadLibrary oder LoadLibraryEx auf Windows-Versionen vor Windows Vista laden. Wenn Die DLL explizit geladen wird, müssen Sie die lokalen Speicherfunktionen des Threads anstelle von _declspec(Thread) verwenden.