首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

句柄就是void *p解决思路

2012-03-18 
句柄就是void **pwindows下的句柄功能强大,涉及到了win下编程的方方面面,对其解释也含含糊糊,让人很感性,

句柄就是void **p
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对句柄的操作都由函数完成,所以用户自己处理不了句柄,句柄也就成谜了,嘿嘿

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



[解决办法]

C/C++ code
//winnt.h#ifdef STRICTtypedef void *HANDLE;#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name#elsetypedef PVOID HANDLE;#define DECLARE_HANDLE(name) typedef HANDLE name#endiftypedef HANDLE *PHANDLE;
[解决办法]
是void*
[解决办法]
句柄就是dword 数值,相当于索引。
用这个索引到当前进程的句柄表,经过计算就可以从表中查询的该对象的地址。

[解决办法]
多写写驱动,看看WRK就明白了

热点排行