原创 句柄就是 void ** p

2010-9-1 14:49 2985 10 10 分类: 软件与OS
windows下的句柄功能强大,涉及到了win下编程的方方面面,对其解释也含含糊糊,让人很感性,很迷惑。
但句柄无非下C/C++下的产物,再神秘也超不出这个范围,所以我猜想……

做以下猜测:
可以把句柄理解为就是一个指针的指针,windows为了让实际地址隐藏起来,只由操作系统来管理,所以没有把直接的地址给用户,需要间接访问。
比如你申请了一个内存空间(对象),系统返回 p_handle, 可以猜测 p_handle是以下结构:

void *handle_list[NUM]; //句柄链表,这里写为指针数组,由操作系统管理

handle_list[n_using] = new XXX; //申请内存,操作系统管理

p_handle = (HANDLE)& handle_list[n_using]; //给句柄赋值,句柄是指向存放实际内存地址的指针的指针。

总结一句话:
void * p= new XXX;
void ** handle= &p;

这样你可以用p_handle来传达操作的对象,但对象的地址却由操作系统来控制,它可以改变handle_list[n_using]指向的地址,用户却不用关心。
windows对句柄的操作都由函数完成,所以用户自己处理不了句柄,句柄也就成谜了,嘿嘿

休闲之余,大家说说自己的看法。
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
10
关闭 站长推荐上一条 /3 下一条