ヒープ内にメモリブロックを確保
Declare Function HeapAlloc Lib "kernel32.dll" _
(ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
Declare Function HeapAlloc Lib "kernel32.dll" _
(ByVal hHeap As Integer, ByVal dwFlags As Integer, ByVal dwBytes As Integer) As Integer
LPVOID HeapAlloc(
HANDLE hHeap,
DWORD dwFlags,
SIZE_T dwBytes
);
引数
hHeap
ヒープのハンドルdwFlags
動作を指定する定数の組み合わせdwBytes
確保するバイト数戻り値
HeapCreate()関数においてdwMaximumSizeに値を設定したとき
自動拡張しない("non-growable")ヒープになる。
そのときdwBytesは&H7FFF8未満でなければいけない。
正常終了のとき メモリブロックへのポインタ備考
エラーが発生し、dwFlags=HEAP_GENERATE_EXCEPSITIONを設定しなかったとき 0
同、dwFlags=HEAP_GENERATE_EXCEPTIONを設定したとき エラーの定数
エラーが発生したとき、GetLastError()関数とSetLastError()関数使用不可。dwFlagsの定数
この関数は要求したサイズか、それを上回るサイズを確保する。
実際のサイズはHeapSize()関数で取得可能。ヒープを解放するときはHeapFree()関数を使用。
dwFlags=HEAP_NO_SERIALIZEを指定して、2つ以上のスレッドが
同じヒープに対して同時にアクセスしても互いに干渉しない。
よってHEAP_NO_SERIALIZEを設定する場合は以下の場合にのみ使うと安全。
プロセスはスレッドを1つだけ持つ。
プロセスはマルチスレッドだが、1つのスレッドだけがヒープにアクセスする。
プロセスはマルチスレッドだが、アプリケーションが互いに干渉を避ける処理をしている。
エラーの定数
HEAP_GENERATE_EXCEPTIONS = &H4 エラーのとき例外を発生させる
HEAP_NO_SERIALIZE = &H1 ヒープにアクセス中、他のスレッドを終了させる
HEAP_ZERO_MEMORY = &H8 0で初期化する
STATSU_NOMEMORY = &H17 メモリ不足の例外
STATUS_ACCESS_VIOLATION = &H5 ヒープが破壊 or 不正なパラメータの例外