パラメータ
hMem
再確保するローカルメモリオブジェクトのハンドルを指定する。LocalAlloc 関数または LocalReAlloc
関数が返したハンドルを使う。
uBytes
メモリブロックの新しいサイズをバイト数で指定する。uFlags パラメータに LMEM_MODIFY
フラグがセットされている場合、このパラメータは
無視される。
uFlags
再確保するローカルメモリオブジェクトのタイプを表すフラグを指定する。LMEM_MODIFY
フラグがセットされている場合、メモリオブジェクトの
属性が変更され、uBytes パラメータは無視される。それ以外の場合、このパラメータはメモリオブジェクトの再確保の方法を制御する。
LMEM_MODIFY フラグは、次のフラグの一方または両方と組み合わせて指定できる。
フラグ
|
意味
|
LMEM_DISCARDABLE
|
無視される。このフラグは、16 ビット版 Windows
との互換性のために提供されている。
Win32 でブロックを廃棄するには、LocalDiscard 関数を明示的に呼び出さなければならない。
16 ビット版 Windows では、LMEM_MODIFY
フラグとともにこのフラグをセットすると、廃棄可能なメモリを確保する。オブジェクトがすでに移動可能として確保されている場合や、LMEM_MOVEABLE
フラグがセットされていない場合は、このフラグは無視される。 |
LMEM_MOVEABLE
|
LMEM_MOVEABLE と LMEM_MODIFY
を組み合わせて、固定メモリオブジェクトを移動可能メモリオブジェクトに変換することはできない。これらのフラグを両方ともセットすると、関数はエラーを返す。 |
このパラメータに LMEM_MODIFY をセットしなかった場合、次のフラグの任意の組み合わせを指定できる。
フラグ
|
意味
|
LMEM_MOVEABLE
|
16 ビット版 Windows で uBytes パラメータが 0
の場合にこのフラグをセットすると、以前に確保された移動可能で廃棄可能なメモリブロックを廃棄する。オブジェクトのロックカウントが 0
ではない場合や、ブロックが移動可能と廃棄可能の少なくとも一方を満たしていない場合、この関数は失敗する。uBytes パラメータが 0
以外の場合にこのフラグをセットすると、システムはメモリオブジェクトの移動可能属性または固定属性を変更することなく、再確保されたブロックを新しい位置に移動できる。オブジェクトが固定の場合、返されたハンドルは、hMem
パラメータで指定されたハンドルと異なっていることがある。オブジェクトが移動可能な場合、LocalLock
関数を呼び出した結果そのオブジェクトがすでにロックされているとしても、ハンドルを無効にすることなくそのブロックを移動できる。メモリブロックの新しいアドレスを取得するには、LocalLock
関数を使う。 |
LMEM_NOCOMPACT |
無視される。このフラグは、16 ビット版 Windows
との互換性のために提供されている。 |
LMEM_ZEROINIT |
メモリオブジェクトのサイズが現在増加している場合、追加されたメモリの内容を 0
で初期化する。 |
戻り値
関数が成功すると、再確保されたメモリオブジェクトのハンドルが返る。
関数が失敗すると、NULL が返る。拡張エラー情報を取得するには、GetLastError 関数を使う。
解説
LocalReAlloc 関数が失敗すると、元のメモリは解放されない。また、元のハンドルとポインタも有効なままである。
LocalReAlloc
関数が移動可能オブジェクトを再確保すると、そのメモリオブジェクトのハンドルが返る。このハンドルをポインタに変換するに
は、LocalLock 関数を使う。
LocalReAlloc
関数が固定オブジェクトを再確保すると、返されるハンドルの値は、メモリブロックの最初のバイトのアドレスと同じ値になる。こ
のメモリにアクセスするには、プロセスが単純に戻り値をポインタにキャストするだけである。
Windows 95/98:ヒープマネージャは、4MB 未満のメモリブロックを扱うように設計されている。メモリブロックが
1MB または 2MB より大きく
なることが予期される場合、代わりに VirtualAlloc 関数または VirtualAllocEx
関数を使うと、パフォーマンスの大幅な低下を防止すること
ができる。
|