几句话概括atl thunk技术

ATL的thunk技术过一段时间不看就忘记他是怎么实现的,现在概括为几句话,方便记忆.

CreateWindow时,第一个callback是在同一个堆栈里的,不是异步的.所以可以得到窗口对应的类的this指针.后续的callback则是异步的,得不到对应的窗口对象指针.怎么办呢,这时就用到thunk技术.

thunk就是在数据段模拟了一个WNDPROC的结构,但中间做了手脚,用 this指针替换了WNDPROC的HWND参数.然后把这个WNDPROC设成callback的窗口过程.

顺便说一句,vc6时是在栈上模拟这个callback函数的,所以会有windows数据执行保护的问题,vc2003后则是在堆上模拟的,不会有这个问题. 想在 vc6上解决这个问题可以修改atl的源代码,把thunk这段内存置为可执行权限.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值