プログラミングのメモ帳(C/C++/HSP)

日々のプログラミングで気づいた点や小技集を紹介します。(Windows 10/XP/Vista、VC2017、HSP)

メモリのポインタからハンドルを取得

2010年09月23日 22時33分00秒 | メモリ関連

確保後にロックしたポインタからハンドルを取得するには 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() 関数などに利用します。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« [名前を付けて保存]ダイアログ | トップ | Unicode一覧(3/16) 2600h~2... »
最新の画像もっと見る

コメントを投稿

メモリ関連」カテゴリの最新記事