Dynamic-Link Bibliotheksdaten
Eine Dynamic-Link Library (DLL) kann globale Daten oder lokale Daten enthalten.
Variabler Bereich
Variablen, die in einer DLL-Quellcodedatei als globale Variablen deklariert werden, werden vom Compiler und Linker als globale Variablen behandelt, aber jeder Prozess, der eine bestimmte DLL lädt, erhält seine 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.
Anmerkung
Mit Ihren Entwicklungstools können Sie möglicherweise das Standardverhalten außer Kraft setzen. Beispielsweise unterstützt der Visual C++-Compiler #pragma Abschnitt und der Linker unterstützt die Option "/SECTION". Weitere Informationen finden Sie in der Dokumentation, die in Ihren Entwicklungstools enthalten ist.
Dynamische Speicherzuweisung
Wenn eine DLL Speicher mithilfe einer der Speicherzuweisungsfunktionen zuordnet (GlobalAlloc, LocalAlloc, HeapAllocund VirtualAlloc), wird der Speicher im virtuellen Adressraum des aufrufenden Prozesses zugewiesen und kann nur auf die Threads dieses Prozesses zugreifen.
Eine DLL kann die Dateizuordnung verwenden, um Arbeitsspeicher zuzuweisen, der zwischen Prozessen gemeinsam genutzt werden kann. Eine allgemeine Erläuterung der Verwendung der Dateizuordnung zum Erstellen des benannten freigegebenen Speichers finden Sie unter Dateizuordnung. Ein Beispiel, das die DllMain--Funktion verwendet, um gemeinsam genutzten Speicher mithilfe der Dateizuordnung einzurichten, finden Sie unter Verwenden des freigegebenen Speichers in einer Dynamic-Link Library-.
Lokaler Threadspeicher
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 zuzuweisen. Eine Tabellenkalkulationsanwendung kann beispielsweise 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 über den aktuellen Zustand der einzelnen Tabellenblätter (Zeile, Spalte usw.) zu speichern. Eine allgemeine Erläuterung des lokalen Threadspeichers finden Sie unter thread local storage. Ein Beispiel, das die DllMain--Funktion zum Einrichten des lokalen Threadspeichers verwendet, finden Sie unter Verwenden des lokalen Threadspeichers in einer 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 Windows-Versionen vor Windows Vista laden. Wenn Die DLL explizit geladen wird, müssen Sie die lokalen Threadspeicherfunktionen anstelle von _declspec(Thread)verwenden.