Dati della libreria Dynamic-Link
Una libreria Dynamic-Link (DLL) può contenere dati globali o dati locali.
Ambito variabile
Le variabili dichiarate come globali in un file di codice sorgente DLL vengono considerate variabili globali dal compilatore e dal linker, ma ogni processo che carica una determinata DLL ottiene la propria copia delle variabili globali della DLL. L'ambito delle variabili statiche è limitato al blocco in cui vengono dichiarate le variabili statiche. Di conseguenza, ogni processo ha una propria istanza delle variabili globali e statiche della DLL per impostazione predefinita.
Nota
Gli strumenti di sviluppo possono consentire di eseguire l'override del comportamento predefinito. Ad esempio, il compilatore Visual C++ supporta #pragma sezione e il linker supporta l'opzione /SECTION. Per altre informazioni, vedere la documentazione inclusa negli strumenti di sviluppo.
Allocazione dinamica della memoria
Quando una DLL alloca memoria usando una delle funzioni di allocazione di memoria (GlobalAlloc, LocalAlloc, HeapAlloce VirtualAlloc), la memoria viene allocata nello spazio degli indirizzi virtuali del processo chiamante ed è accessibile solo ai thread di tale processo.
Una DLL può usare il mapping di file per allocare memoria che può essere condivisa tra i processi. Per informazioni generali su come usare il mapping di file per creare la memoria condivisa denominata, vedere Mapping di file. Per un esempio che usa la funzionedllMainper configurare la memoria condivisa usando il mapping dei file, vedere Uso della memoria condivisa in una libreria Dynamic-Link.
Archiviazione locale thread
Le funzioni di archiviazione locale del thread consentono a una DLL di allocare un indice per l'archiviazione e il recupero di un valore diverso per ogni thread di un processo multithreading. Ad esempio, un'applicazione foglio di calcolo può creare una nuova istanza dello stesso thread ogni volta che l'utente apre un nuovo foglio di calcolo. Una DLL che fornisce le funzioni per varie operazioni del foglio di calcolo può usare TLS per salvare informazioni sullo stato corrente di ogni foglio di calcolo (riga, colonna e così via). Per una descrizione generale dell'archiviazione locale del thread, vedere Thread Local Storage. Per un esempio che usa la funzioneDllMainper configurare l'archiviazione locale del thread, vedere Using Thread Local Storage in a Dynamic-Link Library.
Windows Server 2003 e Windows XP: Il compilatore Visual C++ supporta una sintassi che consente di dichiarare variabili locali del thread: _declspec(thread). Se si usa questa sintassi in una DLL, non sarà possibile caricare la DLL in modo esplicito usando LoadLibrary o LoadLibraryEx nelle versioni di Windows precedenti a Windows Vista. Se la DLL verrà caricata in modo esplicito, è necessario usare le funzioni di archiviazione locale del thread anziché _declspec(thread).