鱼C论坛

 找回密码
 立即注册
查看: 2778|回复: 0

[API档案] LocalUnlock

[复制链接]
发表于 2016-6-7 11:47:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
注:本文档由 百日维新 翻译,小甲鱼校对。

原文链接 -> 传送门

函数功能:

LocalUnlock 函数用于减少以 LMEM_MOVEABLE 属性值分配的内存对象的锁计数。该函数对以 LMEM_FIXED 属性值分配的内存对象无效。

注释:与其他内存管理函数相比,局部内存管理函数有更大的开销却提供更少的功能。除非指出使用局部内存管理函数,不然新的应用程序应该使用堆内存管理函数。更多信息请查阅 Global and Local Functions


API 函数原型:

注释:_In_ 说明该参数是输入的。
  1. LPVOID WINAPI LocalUnlock(
  2.   _In_ HLOCAL hMem
  3. );
复制代码


参数解析:

参数 含义
hMem1. 指向局部内存对象的句柄
2. 该句柄由 LocalAlloc 函数或 LocalReAlloc 函数获取


返回值:

1. 如果函数调用成功,但会存在一下两种情况:

  • 减少锁计数之后如果内存对象仍然被锁住,返回值是非 0
  • 减少锁计数之后如果内存对象被解锁,返回值是 0,GetLastError 函数返回 NO_ERROR

2. 如果函数调用失败,返回值是 0,GetLastError 函数返回一个值而非 NO_ERROR。


备注:

1. 每个内存对象的内部数据结构包含一个初始化为 0 的锁计数。对于可移动内存对象,LocalLock 函数会将锁计数值加 1,LocalUnlock 函数将锁计数值减 1。对于 LocalLock 函数的每一次调用,都必须相应的调用一次 LocalUnlock 函数。除非使用 LocalReAlloc 函数对内存对象进行重新分配,否则被锁定的内存空间不能够被移动或废弃。直到锁计数值减少为 0 时被锁定的内存块才会解锁并可以被移动或者废弃。

2. 如果内存对象已经被解锁,LocalUnlock 函数返回 FALSE ,GetLastError 函数记录 ERROR_NOT_LOCKED 错误日志。以 LMEM_FIXED 属性值分配的内存对象锁计数总是 0,并导致 ERROR_NOT_LOCKED 错误。

3. 进程不应该依赖返回值确定锁数,它必须随后对内存块调用 LocalUnlock 函数解锁。


需求:

Minimum supported client Windows xp [仅桌面应用程序]
Minimum supported server Windows 2003 服务器版 [仅桌面应用程序]
Header WinBase.h (包含于 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll


【API档案】版权归鱼C工作室(www.fishc.com)所有,转载请注明来源。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 01:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表