GlobalUnlock 関数 (winbase.h)

GMEM_MOVEABLEで割り当てられたメモリ オブジェクトに関連付けられているロック数をデクリメントします。 この関数は、 GMEM_FIXEDで割り当てられたメモリ オブジェクトには影響しません。

メモ グローバル関数はオーバーヘッドが大きく、他のメモリ管理機能よりも機能が少なくなります。 新しいアプリケーションでは、グローバル 関数 を使用する必要があるとドキュメントに記載されていない限り、ヒープ関数を使用する必要があります。 詳細については、「 グローバル関数とローカル関数」を参照してください。
 

構文

BOOL GlobalUnlock(
  [in] HGLOBAL hMem
);

パラメーター

[in] hMem

グローバル メモリ オブジェクトへのハンドル。 このハンドルは、GlobalAlloc 関数または GlobalReAlloc 関数によって返されます。

戻り値

ロックカウントをデクリメントした後もメモリ オブジェクトがロックされている場合、戻り値は 0 以外の値になります。 ロック数を減らした後にメモリ オブジェクトのロックが解除された場合、この関数は 0 を返し、GetLastError はNO_ERRORを返します。

関数が失敗した場合、戻り値は 0 で、GetLastError はNO_ERROR以外の値を返します。

解説

各メモリ オブジェクトの内部データ構造には、最初は 0 であるロックカウントが含まれます。 移動可能なメモリ オブジェクトの場合、 GlobalLock 関数はカウントを 1 ずつインクリメントし、 GlobalUnlock はカウントを 1 ずつデクリメントします。 プロセスがオブジェクトの GlobalLock に対して行う呼び出しごとに、最終的に GlobalUnlock を呼び出す必要があります。 ロックされたメモリは、 GlobalReAlloc 関数を使用してメモリ オブジェクトが再割り当てされない限り、移動または破棄されません。 ロックされたメモリ オブジェクトのメモリ ブロックは、ロックカウントが 0 にデクリメントされるまでロックされたままになり、その時点で移動または破棄できます。

GMEM_FIXEDで割り当てられたメモリ オブジェクトのロックカウントは常に 0 です。 指定したメモリ ブロックが固定メモリの場合、この関数は TRUE を返します。

メモリ オブジェクトが既にロック解除されている場合、 GlobalUnlockFALSE を 返し、 GetLastErrorERROR_NOT_LOCKED報告します。

プロセスは、メモリ オブジェクトに対して GlobalUnlock を呼び出す必要がある回数を決定するために、戻り値に依存しないようにする必要があります。

要件

   
サポートされている最小のクライアント Windows XP [デスクトップ アプリ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー winbase.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

グローバル関数とローカル関数

GlobalAlloc

GlobalLock

GlobalReAlloc

メモリ管理関数