|
发表于 2008-2-23 13:26:59
|
显示全部楼层
handle不是指针,H2I返回值不过是一个标号,是handle表中数据的一个编号,CreateRect(......)会在HANDLE表中申请一个空间,这个空间的编号是handle的内容,而该空间的内容是实际地址指针和变量连接数,如果你使用的是局部变量的话,local rect rt = CreateRect(......)将直接使该编号的handle表的变量连接数加1,rt是回自动回收的,但是指向的handle表内容不会,因此这个handle值始终是有效的,他始终指向一个固定不变的地址,即使这个空间的内容改了你也不会找不到东西,但却有可能因为找到的东西不正确而崩溃.
以下是handle表的结构,自己理解吧,这些都是我实际反汇编总结的不会有错
typedef struct
{
int VarCount; //指向该编号的变量数
int HandleAddress; //该编号所对应HANDLE的实际地址
int UnKnow; //还没看出来,貌似一直是0 - -...
}HandleTableElement; |
|