打开APP
未登录
开通VIP,畅享免费电子书等14项超值服
开通VIP
首页
好书
留言交流
下载APP
联系客服
句柄到底是什么意思?!
chuanshaoke
>《c》
2010.04.21
关注
就是一个指针
在32位windows中占用4个字节
它指向内存的尺寸由它的类型决定
函数用句柄来传递数据
句柄在winnt.h中是这么定义的:
#ifdef
STRICT
typedef
void
*HANDLE;
#define
DECLARE_HANDLE(name)
struct
name##__
{
int
unused;
};
typedef
struct
name##__
*name
#else
typedef
PVOID
HANDLE;
#define
DECLARE_HANDLE(name)
typedef
HANDLE
name
#endif
STRICT修饰符的意思是变量类型是否要求严格定义。在这里,我们可以看到HANDLE其实就是一个void类型的指针。这样有什么用呢?学过c/c++语言的人都知道,void类型的指针可以通过强制类型转换变为任何类型的指针,使用最灵活。
在很多情况下,句柄是一个对象的指针,或者说是地址,一个对象的地址。比如对于分配的一个内存块(对象),它的句柄就是它的首地址,这没什么问题。
但是这并不总是成立的,对于没有对象意义的句柄尤其如此。这就取决与系统的定义了。比如系统钩子的类型HHOOK,说它是地址就没有任何意义。对于窗口句柄也是如此。在这些情况下,我们可以把句柄理解为某事物在系统该类事物列表中的ID。
是不是加点分呀?我从来没回答过50分以下的题目。:)
句柄是对象的索引,这样隐藏了危险的地址信息,同时也使系统对象和应用程序隔离。
句柄,你可以把他想象成一个把子,让别人来拎的把子.至于怎么来拎,是操作系统的事情
句柄不是指针,作为内核对象他是系统一个内核对象指针的索引.可以间接的认为他是指针的指针.
呵呵,说不清楚,关键是不同的句柄,有不同的处理方法
你需要知道的是如何得到一个句柄,然后保存他,在需要的地方把他作为参数传给函数就可以了,具体是什么其实不需要知道:)
在32位Windows中,“句柄不是指针”这句话已经不再成立了,比如GlobalAlloc()等内存分配函数返回的句柄实际就是该内存的地址。因此才不需要使用GlobalLock()来锁定句柄以得到地址。这些东西n年以前在MSDN中就说明了。
事实上,有实际对象意义的东西(占用一段存储器),比如上面说的内存的句柄基本就是地址。其它没有对象意义的东西是系统索引。这些你只要看看Windows的那几个头文件就能理解了。
说句题外话,如果没有看过Windows标准头文件和MFC源程序就不能算是真正的Windows程序员。撑死是一个合格的c/c++程序员。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报
。
打开APP,阅读全文并永久保存
查看更多类似文章
猜你喜欢
类似文章
句柄和指针的区别
深入了解Windows句柄到底是什么
句柄 指针
句柄和指针区别
句柄
什么是句柄?为什么会有句柄?HANDLE
更多类似文章 >>
生活服务
热点新闻
留言交流
回顶部
联系我们
分享
收藏
点击这里,查看已保存的文章
导长图
关注
一键复制
下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!
联系客服
微信登录中...
请勿关闭此页面
先别划走!
送你5元优惠券,购买VIP限时立减!
5
元
优惠券
优惠券还有
10:00
过期
马上使用
×