確保後にロックしたポインタからハンドルを取得するには GlobalHandle 関数を使います。(戻る)
プロトタイプ宣言
HGLOBAL GlobalHandle( LPCVOID lpBuff // ロック済みのポインタ );
サンプル
// 移動可能メモリをロック済みで確保 LPTSTR funcAlloc( DWORD dwSize ) { HGLOBAL hMem; // 文字数からバイト数に変換 dwSize *= sizeof(TCHAR); dwSize += sizeof(TCHAR); if ( (hMem = GlobalAlloc(dwSize,(GMEM_MOVEABLE | GMEM_ZEROINIT))) != NULL ){ return (LPTSTR)GlobalLock( hMem ); } return NULL; } // ロック済みのポインタからハンドルを取得 DWORD funcHandleSize( LPTSTR lpBuff ) { HGLOBAL hMem; if ( (hMem = GlobalHandle(lpBuff)) != NULL ){ return GlobalSize( hMem ); } return 0; }
使用例
int main( void ) { LPTSTR lpBuff; if ( (lpBuff = funcAlloc(1024)) != NULL ){ printf( TEXT("Size=%lu\n"), funcHandleSize(lpBuff) ); GlobalFree( lpBuff ); } return 0; }
- funcAlloc() 関数で移動可能メモリをロック済みで確保します。
- その後にロック済みのポインタ(lpBuff)を funcHandleSize() 関数に渡します。
- すると funcHandleSize() 内の GlobalHandle() 関数からグローバル・メモリのハンドル(hMem)が取得できます。
- このハンドル(hMem)を利用して上記では GlobalSize() 関数より lpBuff の確保サイズを取得してます。
- 確保サイズ以外にもハンドル(hMem)を利用する GlobalReAlloc()、GlobalFlags() 関数などに利用します。
※コメント投稿者のブログIDはブログ作成者のみに通知されます