LocalReAlloc

【勇芳软件工作室】汉化HomePreviousNext

LocalReAlloc函数更改指定的本地内存对象的大小或属性。尺寸可以增减。

HLOCAL LocalReAlloc(

HLOCAL 【HMEM】,//本地内存对象的句柄
UINT 【指向包含要写入文件的数据的缓冲区。】,//新的块大小
UINT 【uFlags】//如何重新分配对象
); 

参数

【HMEM】

标识要重新分配的本地内存对象。该句柄由LocalAllocLocalReAlloc功能返回。

【指向包含要写入文件的数据的缓冲区。】

指定内存块的新大小(以字节为单位)。如果此参数为零,并且【uFlags】参数指定LMEM_MOVEABLE标志,该函数将返回一个被标记为已丢弃的内存对象的句柄。如果【uFlags】指定LMEM_MODIFY标志,则忽略该参数。

【uFlags】

指定如何重新分配本地内存对象。如果指定了LMEM_MODIFY标志,则该参数将修改内存对象的属性,并忽略【指向包含要写入文件的数据的缓冲区。】参数。否则,此参数控制内存对象的重新分配。

LMEM_MODIFY标志可以与以下标志中的一个或两者相结合:

含义
LMEM_DISCARDABLE 
 如果还指定了LMEM_MODIFY标志,则分配可丢弃的内存。该标志被忽略,除非该对象先前被分配为可移动或LMEM_MOVEABLE标志也被指定。
LMEM_MOVEABLE 
 您不能将LMEM_MOVEABLE与LMEM_MODIFY组合,将固定的内存对象更改为可移动的内存对象。如果应用程序尝试此函数,该函数将返回错误。

如果【uFlags】未指定LMEM_MODIFY,则此参数可以是以下标志的任意组合:

含义
LMEM_MOVEABLE 
 如果【指向包含要写入文件的数据的缓冲区。】为零,则丢弃先前可移动和可丢弃的内存块。如果对象的锁定计数不为零,或者块不可移动和丢弃,则该函数将失败。
 如果【指向包含要写入文件的数据的缓冲区。】非零,则使系统能够将重新分配的块移动到新位置,而不会更改内存对象的可移动或固定属性。如果对象是固定的,返回的句柄可能与【HMEM】参数中指定的句柄不同。如果对象是可移动的,即使当前对LocalLock功能的调用当前被锁定,该块也可以移动而不使句柄无效。要获取内存块的新地址,请使用LocalLock.
LMEM_NOCOMPACT 
 防止内存被压缩或丢弃以满足分配请求。
LMEM_ZEROINIT 
 如果内存对象的大小不断增加,则会使额外的内存内容初始化为零。

返回值

如果函数成功,则返回值是重新分配的内存对象的句柄。

如果函数失败,返回值为NULL。要获取扩展错误信息,请调用GetLastError.

备注

如果LocalReAlloc重新分配可移动对象,则返回值是内存对象的句柄。要将句柄转换为指针,请使用LocalLock功能。

如果LocalReAlloc重新分配固定对象,则返回的句柄的值是内存块的第一个字节的地址。要访问内存,进程可以简单地将返回值转换为指针。

也可以看看

LocalAlloc, LocalFree, LocalLock