LocalUnlock 関数 (winbase.h)

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

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

構文

BOOL LocalUnlock(
  [in] HLOCAL hMem
);

パラメーター

[in] hMem

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

戻り値

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

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

解説

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

メモリ オブジェクトが既にロック解除されている場合、 LocalUnlockFALSE を 返し、 GetLastErrorERROR_NOT_LOCKED報告します。 LMEM_FIXEDで割り当てられたメモリ オブジェクトのロックカウントは常に 0 で、ERROR_NOT_LOCKED エラーが発生します。

プロセスは、戻り値に依存して、その後メモリ ブロックに対して LocalUnlock を呼び出す必要がある回数を決定しないでください。

要件

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

関連項目

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

LocalAlloc

LocalFlags

LocalLock

LocalReAlloc

メモリ管理関数