Dynamic-Link bibliotheekgegevens
Een Dynamic-Link Library (DLL) kan globale gegevens of lokale gegevens bevatten.
Variabele bereik
Variabelen die zijn gedeclareerd als globaal in een DLL-broncodebestand, worden behandeld als globale variabelen door de compiler en linker, maar elk proces dat een bepaalde DLL laadt, krijgt een eigen kopie van de globale variabelen van die DLL. Het bereik van statische variabelen is beperkt tot het blok waarin de statische variabelen worden gedeclareerd. Als gevolg hiervan heeft elk proces standaard een eigen exemplaar van de globale en statische DLL-variabelen.
Notitie
Met uw ontwikkelhulpprogramma's kunt u het standaardgedrag negeren. De Visual C++-compiler ondersteunt bijvoorbeeld #pragma sectie- en de linker ondersteunt de optie /SECTION. Zie de documentatie die is opgenomen in uw ontwikkelhulpprogramma's voor meer informatie.
Dynamische geheugentoewijzing
Wanneer een DLL geheugen toewijst met behulp van een van de geheugentoewijzingsfuncties (GlobalAlloc, LocalAlloc, HeapAllocen VirtualAlloc), wordt het geheugen toegewezen in de virtuele adresruimte van het aanroepende proces en is alleen toegankelijk voor de threads van dat proces.
Een DLL kan bestandstoewijzing gebruiken om geheugen toe te wijzen die kan worden gedeeld tussen processen. Zie Bestandstoewijzingvoor een algemene bespreking van het gebruik van bestandstoewijzing om een benoemd gedeeld geheugen te maken. Zie Gedeeld geheugen gebruiken in een Dynamic-Link bibliotheekvoor een voorbeeld waarin de functie dllmain- wordt gebruikt om gedeeld geheugen in te stellen met behulp van bestandstoewijzing.
Lokale threadopslag
Met de tls-functies (Thread Local Storage) kan een DLL een index toewijzen voor het opslaan en ophalen van een andere waarde voor elke thread van een proces met meerdere threads. Een spreadsheettoepassing kan bijvoorbeeld telkens wanneer de gebruiker een nieuw werkblad opent een nieuw exemplaar van dezelfde thread maken. Een DLL die de functies voor verschillende spreadsheetbewerkingen biedt, kan TLS gebruiken om informatie over de huidige status van elk werkblad (rij, kolom enzovoort) op te slaan. Zie Thread Local Storagevoor een algemene bespreking van lokale threadopslag. Zie Thread Local Storage gebruiken in een Dynamic-Link Libraryvoor een voorbeeld waarin de functie dllMain wordt gebruikt om lokale threadopslag in te stellen.
Windows Server 2003 en Windows XP: De Visual C++-compiler ondersteunt een syntaxis waarmee u thread-lokale variabelen kunt declareren: _declspec(thread). Als u deze syntaxis in een DLL gebruikt, kunt u de DLL niet expliciet laden met behulp van LoadLibrary- of LoadLibraryEx op versies van Windows vóór Windows Vista. Als uw DLL expliciet wordt geladen, moet u de lokale thread-opslagfuncties gebruiken in plaats van _declspec(thread).