原创
句柄就是 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对句柄的操作都由函数完成,所以用户自己处理不了句柄,句柄也就成谜了,嘿嘿
休闲之余,大家说说自己的看法。
文章评论(0条评论)
登录后参与讨论