<Return[JKL]><Top>

LocalReAlloc

Declare Function Api_LocalReAlloc& Lib "kernel32" Alias "LocalReAlloc" (ByVal hMem&, ByVal wBytes&, ByVal wFlags&)

Declare Function LocalReAlloc Lib "kernel32" Alias "LocalReAlloc" (ByVal hMem As Long, ByVal wBytes As Long, ByVal wFlags As Long) As Long

指定されたローカルメモリオブジェクトのサイズまたは属性を変更する。サイズは増減することができる。
※この関数は、16 ビット版 Windows との互換性ために提供されている。

パラメータ
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 関数を使うと、パフォーマンスの大幅な低下を防止すること

    ができる。