<Return[G]><Top>

GlobalReAlloc

Declare Function Api_GlobalReAlloc& Lib "kernel32" Alias "GlobalReAlloc" (ByVal hMem&, ByVal dwBytes&, ByVal wFlags&)

Declare Function GlobalReAlloc Lib "kernel32" Alias "GlobalReAlloc" (ByVal hMem As Long, ByVal dwBytes As Long, ByVal wFlags As Long) As Long

グローバルメモリオブジェクトのサイズまたは属性を変更する。サイズは、拡大も縮小もできる。
注意 グローバル関数は他のメモリ管理関数より低速で、提供する機能も多くはない。そのため、新しいアプリケーションは(ヒープ関数)を使う。しかし、DDE 関数とクリップボード関数では、依然としてグローバル関数が使われている。

パラメータ
hMem
    [入力]再割り当てしたいグローバルメモリオブジェクトのハンドルを指定する。GlobalAlloc 関数または GlobalReAlloc 関数が、このハンド

    ルを返す。
dwBytes
    [入力]メモリブロックの新しいサイズを、バイト単位で指定する。uFlags パラメータで GMEM_MODIFY フラグを指定すると、このパラメー

    タは無視される。
uFlags
    [入力]メモリを再割り当てする方法を指定する。GMEM_MODIFY フラグを指定すると、このパラメータはメモリオブジェクトの属性を変更

    し、dwBytes パラメータは無視されまる(サイズは変更されない)。それ以外の場合、このパラメータはメモリオブジェクトの再割り当てを制御

    する。
    GMEM_MODIFY と共に、次の値の一方または両方を指定できる。

    値                                    

意味                                                                                                                            

    GMEM_DISCARDABLE

 

 

 

 

無視される。この値は、16 ビット版 Windows との互換性を保つ目的でのみ提供されている。
Win32 環境では、GlobalDiscard 関数を呼び出して、ブロックを明示的に破棄しなければならない。
16 ビット版 Windows では、GEM_MODIFY が共に指定されている場合、破棄可能なメモリを割り当てる。このオブジェクトが既に移動可能なものとして割り当てられている場合や、GMEM_MOVEABLE が指定されていない場合、この値は無視される

    GMEM_MOVEABLE

 

 

 

 

GMEM_MODIFY が共に指定されている場合、GMEM_MODIFY は固定メモリオブジェクトを移動可能メモリオブジェクトへ変更する。
GMEM_MODIFY が指定されていない場合、GMEM_MOVEABLE を指定すると、ロック済み GMEM_MOVEABLE メモリブロックまたは GMEM_FIXED メモリブロックを新しい固定位置へ移動できる。GMEM_MODIFY と GMEM_MOVEABLE のどちらも指定されていない場合、固定メモリブロックとロック済み移動可能メモリブロックは、同じ場所でのみ再割り当てできる。

    このパラメータで GMEM_MODIFY を指定しなかった場合、次の値の任意の組み合わせを指定できる。

    値                                    

意味                                                                                                                            

    GMEM_NOCOMPACT

無視される。この値は、16 ビット版 Windows との互換性を保つ目的でのみ提供されている。

    GMEM_ZEROINIT

メモリオブジェクトのサイズを拡大する場合、追加メモリの内容を 0 に初期化する。

 

戻り値
    関数が成功すると、再割り当てされたメモリオブジェクトのハンドルが返る。
    関数が失敗すると、NULL が返ります。拡張エラー情報を取得するには、 関数を使う。

解説
    GlobalReAlloc が移動可能メモリを再割り当てすると、そのメモリオブジェクトのハンドルが返る。ハンドルをポインタへ変換するには、

    GlobalLock 関数を使う。
    GlobalReAlloc が固定メモリを再割り当てすると、返されるハンドルの値は、そのメモリブロックの最初のバイトのアドレスに等しくなる。このメ

    モリにアクセスするには、戻り値を単純にポインタ型へキャストする。
    GlobalReAlloc が失敗すると、元のメモリは解放されず、元のハンドルとポインタは依然として有効なままである。
    Windows 95/98:このヒープマネージャは、4MB 未満のメモリブロックを想定して設計されている。1MB または 2MB より大きいメモリブロッ

    クを予期している場合、代わりに VirtualAlloc または VirtualAllocEx 関数を使うことにより、パフォーマンスの大幅な低下を回避できる。