HeapReAlloc

機能
ヒープオブジェクトのサイズ、または属性の変更
Declare Function HeapReAlloc Lib "kernel32.dll" _
(ByVal hHeap As Long, ByVal dwFlags As Long, _
ByVal lpMem As Long, ByVal dwBytes As Long) As Long
Declare Function HeapReAlloc Lib "kernel32.dll" _
(ByVal hHeap As Integer, ByVal dwFlags As Integer, _
ByVal lpMem As Integer, ByVal dwBytes As Integer) As Integer

LPVOID HeapReAlloc(
HANDLE hHeap,
DWORD dwFlags,
LPVOID lpMem,
SIZE_T dwBytes
);
引数
hHeap

ヒープのハンドル
dwFlags
動作を指定する定数の組み合わせ
lpMem
メモリブロックへのポインタ
dwBytes
再確保するバイト数
HeapCreate()関数においてdwMaximumSizeに値を設定したとき
自動拡張しない("non-growable")ヒープになる。
そのときdwBytesは&H7FFF8未満でなければいけない。
戻り値
正常終了のとき  メモリブロックへのポインタ
エラーが発生し、dwFlags=HEAP_GENERATE_EXCEPSITIONを設定しなかったとき  0
同、dwFlags=HEAP_GENERATE_EXCEPTIONを設定したとき               エラーの定数
備考
エラーが発生したとき、GetLastError()関数SetLastError()関数使用不可。
この関数は要求したサイズか、それを上回るサイズを確保する。
実際のサイズはHeapSize()関数で取得可能。ヒープを解放するときはHeapFree()関数を使用。
dwFlags=HEAP_NO_SERIALIZEを指定して、2つ以上のスレッドが
同じヒープに対して同時にアクセスしても互いに干渉しない。
よってHEAP_NO_SERIALIZEを設定する場合は以下の場合にのみ使うと安全。

プロセスはスレッドを1つだけ持つ。
プロセスはマルチスレッドだが、1つのスレッドだけがヒープにアクセスする。
プロセスはマルチスレッドだが、アプリケーションが互いに干渉を避ける処理をしている。    
dwFlagsの定数

HEAP_GENERATE_EXCEPTIONS = &H4              エラーのとき例外を発生させる
HEAP_NO_SERIALIZE = &H1                     ヒープにアクセス中、他のスレッドを終了させる
HEAP_ZERO_MEMORY = &H8                      0で初期化する
エラーの定数

STATSU_NOMEMORY = &H17                      メモリ不足の例外
STATUS_ACCESS_VIOLATION = &H5               ヒープが破壊 or 不正なパラメータの例外