winbase.h


GlobalReAlloc

La función GlobalReAlloc cambia el tamaño o los atributos de un objeto de memoria global especificado. El tamaño puede crecer o disminuir.

Sintaxis

HGLOBAL GlobalReAlloc(
    HGLOBAL hMem,   // manipulador de objeto de memoria global
    DWORD dwBytes,  // nuevo tamaño del bloque
    UINT uFlags     // cómo reubicar el objeto
   );

Parámetros:

hMem: identifica el objeto de memoria global a reubicar. Este manipulador puede ser devuelto por las funciones GlobalAlloc o GlobalReAlloc.

dwBytes: especifica el nuevo tamaño, en bytes, del bloque de memoria. Si este parámetro es cero y el parámetro uFlags especifica la bandera GMEM_MOVEABLE, la función devuelve un manipulador a un objeto de memoria que es marcado como descartado. Si uFlags especifica la bandera GMEM_MODIFY, este parámetro es ignorado.

uFlags: especifica cómo reubicar el objeto de memoria global. Si se especifica la bandera GMEM_MODIFY, este parámetro modifica los atributos del objeto de memoria, y el parámetro dwBytes se ignora. En otro caso, este parámetro controla la reubicación del objeto de memoria.

La bandera GMEM_MODIFY puede ser combinada con cualquiera o con las dos banderas siguientes:

Bandera Significado
GMEM_DISCARDABLE Reserva memoria descartable si se especifica también la bandera GMEM_MODIFY. Esta bandera se ignora, a no ser que el objeto haya sido reservado previamente como movible o que se haya especificado también la bandera GMEM_MOVEABLE.
GMEM_MOVEABLE Sólo en Windows NT: cambia un objeto de memoria fijo a móvil si también se especifica la bandera GMEM_MODIFY.

Si uFlags no especifica GMEM_MODIFY, este parámetro puede ser cualquier combinación de las banderas siguientes:

Bandera Significado
GMEM_MOVEABLE Si dwBytes es cero, descarta el bloque de memoria móvil y descartable previo. Si el contador de bloqueos del objeto no es cero o si el bloque no es móvil y descartable, la función falla.
Si dwBytes no es cero, permite al sistema mover el bloque reubidado a una nueva posición sin modificar el atributo de móvil o fijo del objeto de memoria. Si el objeto es fijo, el manipulador devuelto puede ser diferente del especificado en el parámetro hMem. Si el objeto es móvil, el bloque puede ser movido sin invalidar el manipulador, aunque el objeto esté actualmente bloqueado por una llamada previa a la función GlobalLock. Para obtener una nueva dirección del bloque de memoria, usar GlobalLock.
GMEM_NOCOMPACT No compacta o descarta memoria para satisfacer una petición de memoria.
GMEM_ZEROINIT Hace que la memoria adicional se inicialice a cero si el objeto de memoria ha crecido en tamaño.

Valor de retorno

Si la función tiene éxito, el valor de retorno es el manipulador del objeto de memoria reubicado.

Si la función falla, el valor de retorno es NULL. Para obtener información más detallada sobre el error, llamar a la función GetLastError.

Observaciones

Si GlobalReAlloc reubica un objeto móvil, el valor de retorno es el manipulador del objeto de memoria. Para convertir el manipulador en un puntero hay que usar la función GlobalLock.

Si GlobalReAlloc reubica un objeto fijo, el valor del manipulador revuelto es la dirección del primer byte del bloque de memoria. Para acceder a la memoria, el proceso puede hacer una conversión (casting) del valor de retorno a puntero.

Si GlobalReAlloc falla, la memoria original no se libera, y el manipulador y puntero originales continúan siendo válidos.