メモリを動的に確保するにはGlobalAlloc()関数を使います。
動的確保したメモリを解放するにはGlobalFree()関数を使います。
移動可能メモリの場合はGlobalLock()、GlobalUnlock()関数も使います。(戻る)
- // 割り当ての属性
- GMEM_FIXED(固定メモリ)
- GMEM_MOVEABLE(移動可能メモリ)
- GMEM_ZEROINIT(確保時にゼロ初期化)
- GPTR(GMEM_ZEROINIT | GMEM_FIXEDと同じ)
- GHND(GMEM_ZEROINIT | GMEM_MOVEABLEと同じ)
プロトタイプ宣言
HGLOBAL GlobalAlloc( UINT uFlags, // 割り当ての属性 SIZE_T dwBytes // 割り当てのバイト数 ); HGLOBAL GlobalFree( HGLOBAL hMem // グローバルメモリのハンドル ); LPVOID GlobalLock( HGLOBAL hMem // グローバルメモリのハンドル ); BOOL GlobalUnlock( HGLOBAL hMem // グローバルメモリのハンドル );
サンプル
// 固定メモリの動的確保 HGLOBAL hMem; LPTSTR lpBuff; if ( (hMem = GlobalAlloc(GPTR,100 * 1024)) != NULL ){ // 100 KB確保 // 固定メモリではキャストするだけで良い lpBuff = (LPTSTR)hMem; /* ここでlpBuffを使う */ GlobalFree( hMem ); }
サンプル
// 移動可能メモリの動的確保 HGLOBAL hMem; LPTSTR lpBuff; if ( (hMem = GlobalAlloc(GHND,100 * 1024)) != NULL ){ // 100 KB確保 // 移動可能メモリではロックする必要がある if ( (lpBuff = (LPTSTR)GlobalLock(hMem)) != NULL ){ /* ここでlpBuffを使う */ GlobalUnlock( hMem ); } GlobalFree( hMem ); }
- // (破棄マーク付きの)ハンドルだけ作成したい場合
- HGLOBAL hMem = GlobalAlloc( GMEM_MOVEABLE, 0 );
- ※最初にハンドルだけを作成しておき、後でメモリを割り当てる場合に使います。
※コメント投稿者のブログIDはブログ作成者のみに通知されます