ATL Thunk机制学习

本文深入探讨了ATL模板类库中使用的Thunk技术原理及其应用,详细介绍了如何通过Thunk实现在窗口消息处理中this指针与HWND之间的映射。此外,还提供了一个示例,展示了如何自定义Thunk来修改函数指针。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      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 代替窗口句柄 hWnd esp+0x4 中放的就是 hWnd ),然后跳转到传入的 proc 函数处( (int)proc - ((int)this+sizeof(_WndProcThunk)) proc thunk 之间的距离)。

 

 

 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值