ATL Thunk机制学习

来源:互联网 发布:杭州谷川服饰好吗知乎 编辑:程序博客网 时间:2024/06/07 01:10

      ATL模板类库使用Thunk技术来实现与窗口消息相关联的HWND和负责处理消息的对象的this指针之间的映射。
    ATL中窗口类注册时,窗口过程函数缺省值都是StartWindowProc,当创建窗口产生第一条消息时将调用此函数。StartWindowProc是CWindowImplBase的一个静态成员函数,它的工作是建立CWindowImpl派生对象的HWND与对象的this指针之间的映射。在新的HWND被缓存到WindowImpl派生对象的成员数据中之后,对象真正的窗口过程将替代StartWindowProc窗口过程,并且窗口过程参数HWND被替换成对象指针值。

   

 

Init()函数中这组汇编指令被初始化为下面的指令:

mov dword ptr [esp+0x4], pThis

jmp (int)proc - ((int)this+sizeof(_WndProcThunk))

 

它完成的功能是,用窗口类的指针pThis代替窗口句柄hWndesp+0x4中放的就是hWnd),然后跳转到传入的proc函数处((int)proc - ((int)this+sizeof(_WndProcThunk))procthunk之间的距离)。

 

 

 

以下是关于Thunk技术测试的例子