Datos de la biblioteca de Dynamic-Link

Una biblioteca de Dynamic-Link (DLL) puede contener datos globales o datos locales.

Ámbito de variable

Las variables declaradas como globales en un archivo de código fuente DLL se tratan como variables globales por el compilador y enlazador, pero cada proceso que carga un archivo DLL determinado obtiene su propia copia de las variables globales de ese archivo DLL. El ámbito de las variables estáticas se limita al bloque en el que se declaran las variables estáticas. Como resultado, cada proceso tiene su propia instancia de las variables globales y estáticas dll de forma predeterminada.

Nota

Las herramientas de desarrollo pueden permitirle invalidar el comportamiento predeterminado. Por ejemplo, el compilador de Visual C++ admite #pragma sección y el enlazador admite la opción /SECTION. Para obtener más información, consulte la documentación incluida con las herramientas de desarrollo.

 

Asignación de memoria dinámica

Cuando un archivo DLL asigna memoria mediante cualquiera de las funciones de asignación de memoria (GlobalAlloc, LocalAlloc, HeapAlloc y VirtualAlloc), la memoria se asigna en el espacio de direcciones virtuales del proceso de llamada y solo es accesible para los subprocesos de ese proceso.

Un archivo DLL puede usar la asignación de archivos para asignar memoria que se puede compartir entre procesos. Para obtener una explicación general sobre cómo usar la asignación de archivos para crear memoria compartida con nombre, consulte Asignación de archivos. Para ver un ejemplo que usa la función DllMain para configurar la memoria compartida mediante la asignación de archivos, consulte Uso de memoria compartida en una biblioteca de Dynamic-Link.

Almacenamiento local para el subproceso

Las funciones de almacenamiento local de subproceso (TLS) permiten que un archivo DLL asigne un índice para almacenar y recuperar un valor diferente para cada subproceso de un proceso multiproceso. Por ejemplo, una aplicación de hoja de cálculo puede crear una nueva instancia del mismo subproceso cada vez que el usuario abre una nueva hoja de cálculo. Un archivo DLL que proporciona las funciones para varias operaciones de hoja de cálculo puede usar TLS para guardar información sobre el estado actual de cada hoja de cálculo (fila, columna, etc.). Para obtener una explicación general del almacenamiento local de subprocesos, consulte Almacenamiento local de subprocesos. Para obtener un ejemplo que usa la función DllMain para configurar el almacenamiento local del subproceso, consulte Uso del almacenamiento local de subprocesos en una biblioteca de Dynamic-Link.

Windows Server 2003 y Windows XP: El compilador de Visual C++ admite una sintaxis que permite declarar variables locales de subproceso: _declspec(thread). Si usa esta sintaxis en un archivo DLL, no podrá cargar el archivo DLL explícitamente mediante LoadLibrary o LoadLibraryEx en versiones de Windows anteriores a Windows Vista. Si el archivo DLL se cargará explícitamente, debe usar las funciones de almacenamiento local del subproceso en lugar de _declspec(subproceso).