winbase.h


LocalReAlloc

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

Sintaxis

HLOCAL LocalReAlloc(
    HLOCAL hMem,  // manipulador de objeto de memoria local
    UINT uBytes,  // nuevo tamaño del bloque
    UINT uFlags   // cómo reubicar el objeto
   );

Parámetros:

hMem: identifica el objeto de memoria local a reubicar. Este manipulador puede ser devuelto por las funciones LocalAlloc o LocalReAlloc.

uBytes: 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 LMEM_MOVEABLE, la función devuelve un manipulador al objeto de memoria que es marcado como descartado. Si uFlags especifica la bandera LMEM_MODIFY, este parámetro es ignorado.

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

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

Bandera Significado
LMEM_DISCARDABLE Reserva memoria descartable si se especifica también la bandera LMEM_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 LMEM_MOVEABLE.
LMEM_MOVEABLE No se puede combinar LMEM_MOVEABLE con LMEM_MODIFY para modificar un objeto de memoria fijo y convertirlo en movible. La función devuelve un error si una aplicación intenta hacer esto.

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

Bandera Significado
LMEM_MOVEABLE Si uBytes 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 uBytes 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 LocalLock. Para obtener una nueva dirección del bloque de memoria, usar LocalLock.
LMEM_NOCOMPACT No compacta o descarta memoria para satisfacer una petición de memoria.
LMEM_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 LocalReAlloc 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 LocalLock.

Si LocalReAlloc 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.