winbase.h


GlobalUnlock

La función GlobalUnlock decrementa el contador de bloqueos asociado con un objeto de que haya sido reservado con la bandera GMEM_MOVEABLE. Esta función no tiene efecto en objetos de memoria reservadors con la bandera GMEM_FIXED.

Sintaxis

BOOL GlobalUnlock(
    HGLOBAL hMem  // manipulador de objeto de memoria global
   );

Parámetros

hMem: identifica el objeto de memoria globl. Este manipulador es devuelto por las funciones GlobalAlloc o GlobalReAlloc.

Valor de retorno

Si el objeto de memoria sigue estando bloqueado después de decrementar el contador de bloqueos, el valor de retorno es distinto de cero.

Si la función falla, el valor de retorno es cero. Para obtener información más detallada sobre el error, llamar a la función GetLastError. Si GetLastError devuelve NO_ERROR, el objeto de memoria estará desbloqueado.

Observaciones

Las estructuras de datos internas para cada objeto de memoria incluyen un contador de bloqueos que inicialmente vale cero. Para objetos de memoria móviles, la función GlobalLock incrementa este contador en una unidad, y GlobalUnlock lo decrementa, también en uno. Para cada llamada que un proceso haga a GlobalLock para un objeto, también debe hacer una llamada a GlobalUnlock. La memoria bloqueada no puede ser movida o descartada a no ser que el objeto de memoria sea reubicado usando la función GlobalReAlloc. El bloque de memoria de un objeto de memoria bloqueado permanece bloqueado hasta que su contador de bloqueos sea decrementado a cero, en ese momento puede ser movido o descartado.

Los objetos de memoria reservados con la bandera GMEM_FIXED siempre tienen un contador de bloqueos igual a cero. Si el bloque de memoria es fijo, esta función devuelve TRUE.

Si el objeto de memoria ya está desbloqueado, GlobalUnlock devuelve FALSE y GetLastError indica ERROR_NOT_LOCKED. Los objetos de memoria reservados con la bandera GMEM_FIXED siempre tienen un contador de bloqueos cero y producen el error ERROR_NOT_LOCKED.

Un proceso no debe basarse en el valor de retorno para determinar el número de veces que debe llamar a GlobalUnlock para el bloque de memoria.