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 Instanz der globalen und statischen DLL-Variablen.
Hinweis
Mit Ihren Entwicklungstools können Sie möglicherweise das Standardverhalten außer Kraft setzen. Beispielsweise unterstützt der Visual C++ Compiler # den Pragmaabschnitt und der Linker die Option /SECTION. Weitere Informationen finden Sie in der Dokumentation zu Ihren Entwicklungstools.
Dynamischer Arbeitsspeicher Zuordnung
Wenn eine DLL Speicher mithilfe einer der Speicherbelegungsfunktionen (GlobalAlloc, LocalAlloc, HeapAllocund 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 von Prozessen gemeinsam genutzt werden kann. Eine allgemeine Erläuterung zur Verwendung der Dateizuordnung zum Erstellen von benanntem freigegebenen Speicher finden Sie unter Dateizuordnung. Ein Beispiel, in dem die DllMain-Funktion verwendet wird, um freigegebenen Arbeitsspeicher mithilfe der Dateizuordnung einzurichten, finden Sie unter Verwenden von freigegebenen Speicher 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 Instanz desselben Threads erstellen. Eine DLL, die die Funktionen für verschiedene Tabellenkalkulationsvorgänge bereitstellt, kann TLS verwenden, um Informationen zum aktuellen Zustand der einzelnen Tabellenkalkulationen (Zeile, Spalte usw.) zu speichern. Eine allgemeine Erläuterung des lokalen Threadspeichers finden Sie unter ThreadLokale Storage. Ein Beispiel, in dem die DllMain-Funktion zum Einrichten des lokalen Threadspeichers verwendet wird, finden Sie unter Using Thread Local Storage in a Dynamic-Link Library.
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 in Versionen von Windows vor Windows Vista laden. Wenn Ihre DLL explizit geladen wird, müssen Sie die lokalen Threadspeicherfunktionen anstelle von _ declspec(thread) verwenden.