<Return[JKL]><Top>

LocalAlloc

Declare Function Api_LocalAlloc& Lib "kernel32" Alias "LocalAlloc" (ByVal wFlags&, ByVal wBytes&)

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

ヒープから、指定されたバイト数を確保する。Win32 のメモリ管理には、ローカルヒープとグローバルヒープを個別に提供する機能はない。
※この関数は、16 ビット版 Windows との互換性のために提供されている。

パラメータ
uFlags
    確保するメモリのタイプを指定する。0 を指定すると、既定値として LMEM_FIXED フラグがセットされる。互換性のない組み合わせを除け

    ば、次のフラグを組み合わせて指定することができる。

    この関数が固定メモリと移動可能メモリのどちらを確保するかを指定するには、最初の 6 つのフラグのいずれかを指定する。
 

    フラグ                              

意味                                                                                                                    

    LMEM_FIXED

固定メモリを確保する。メモリオブジェクトへのポインタが戻り値として返る。

    LMEM_MOVEABLE

 

 

 

移動可能メモリを確保する。Win32 では、物理メモリ内のメモリブロックは移動することはないが、既定のヒープ内では移動が可能である。
メモリオブジェクトのハンドルが戻り値として返る。このハンドルをポインタに変換するには、LocalLock 関数を使う。

このフラグを LMEM_FIXED フラグと組み合わせることはできない。

    LPTR

LMEM_FIXED フラグと LMEM_ZEROINIT フラグを組み合わせたものと同じである。

    LHND

LMEM_MOVEABLE フラグと LMEM_ZEROINIT フラグを組み合わせたものと同じである。

    NONZEROLHND

LMEM_MOVEABLE フラグと同じである。

    NONZEROLPTR

LMEM_FIXED フラグと同じである。

    LMEM_DISCARDABLE

 

 

無視される。このフラグは、16 ビット版 Windows との互換性のために提供されている。
Win32 で廃棄可能ブロックを確保するには、LocalDiscard 関数を明示的に呼び出さなければならない。
このフラグを LMEM_FIXED フラグと組み合わせることはできない。

    LMEM_NOCOMPACT

無視される。このフラグは、16 ビット版 Windows との互換性のために提供されている。

    LMEM_NODISCARD

無視される。このフラグは、16 ビット版 Windows との互換性の目的のために提供されている。

    LMEM_ZEROINIT

メモリの内容を 0 に初期化する。

uBytes
    確保するバイト数を指定する。0 を指定し、uFlags パラメータに LMEM_MOVEABLE フラグがセットされている場合、この関数は廃棄とマ

    ークされているメモリオブジェクトのハンドルを返す。

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

解説
    要求を満たすための十分な空き領域がヒープに残っていない場合、LocalAlloc 関数は NULL を返す。エラーを示すために NULL が使わ

    れているので、仮想アドレス 0 が使われることは決してない。そのため、NULL ポインタを使ってこれを簡単に検出できる。
    関数が成功すると、少なくとも要求された量のメモリが確保される。確保された量が要求された量よりも多い場合、プロセスでは確保された

    量全体を利用することができる。実際に確保された量を調べるには、LocalSize 関数を使う。
    メモリを解放するには、LocalFree 関数を使う。
    Windows 95/98:ヒープマネージャは、4MB 未満のメモリブロックを扱うように設計されている。メモリブロックが 1MB または 2MB より大きく

    なることが予期される場合、代わりに VirtualAlloc 関数または VirtualAllocEx 関数を使うと、パフォーマンスの大幅な低下を防止すること

    がでる。