Données de bibliothèque Dynamic-Link
Une bibliothèque Dynamic-Link (DLL) peut contenir des données globales ou locales.
Portée des variables
Les variables déclarées comme globales dans un fichier de code source DLL sont traitées comme des variables globales par le compilateur et l’éditeur de liens, mais chaque processus qui charge une DLL donnée obtient sa propre copie des variables globales de cette DLL. L’étendue des variables statiques est limitée au bloc dans lequel les variables statiques sont déclarées. Par conséquent, chaque processus a ses propres instance des variables globales et statiques DLL par défaut.
Notes
Vos outils de développement peuvent vous permettre de remplacer le comportement par défaut. Par exemple, le compilateur Visual C++ prend en charge #pragma section et l’éditeur de liens prend en charge l’option /SECTION. Pour plus d’informations, consultez la documentation incluse avec vos outils de développement.
Allocation de mémoire dynamique
Lorsqu’une DLL alloue de la mémoire à l’aide de l’une des fonctions d’allocation de mémoire (GlobalAlloc, LocalAlloc, HeapAlloc et VirtualAlloc), la mémoire est allouée dans l’espace d’adressage virtuel du processus appelant et n’est accessible qu’aux threads de ce processus.
Une DLL peut utiliser le mappage de fichiers pour allouer de la mémoire qui peut être partagée entre les processus. Pour une présentation générale de l’utilisation du mappage de fichiers pour créer une mémoire partagée nommée, consultez Mappage de fichiers. Pour obtenir un exemple qui utilise la fonction DllMain pour configurer la mémoire partagée à l’aide du mappage de fichiers, consultez Utilisation de la mémoire partagée dans une bibliothèque Dynamic-Link.
stockage local des threads
Les fonctions de stockage local de thread (TLS) permettent à une DLL d’allouer un index pour le stockage et la récupération d’une valeur différente pour chaque thread d’un processus multithread. Par exemple, une application de feuille de calcul peut créer une nouvelle instance du même thread chaque fois que l’utilisateur ouvre une nouvelle feuille de calcul. Une DLL fournissant les fonctions de diverses opérations de feuille de calcul peut utiliser TLS pour enregistrer des informations sur l’état actuel de chaque feuille de calcul (ligne, colonne, etc.). Pour une présentation générale du stockage local des threads, consultez Stockage local des threads. Pour obtenir un exemple qui utilise la fonction DllMain pour configurer le stockage local des threads, consultez Utilisation du stockage local de threads dans une bibliothèque Dynamic-Link.
Windows Server 2003 et Windows XP : Le compilateur Visual C++ prend en charge une syntaxe qui vous permet de déclarer des variables locales de thread : _declspec(thread). Si vous utilisez cette syntaxe dans une DLL, vous ne pourrez pas charger la DLL explicitement à l’aide de LoadLibrary ou LoadLibraryEx sur les versions de Windows antérieures à Windows Vista. Si votre DLL est chargée explicitement, vous devez utiliser les fonctions de stockage local de thread au lieu de _declspec(thread).