几句话概括atl thunk技术

来源:互联网 发布:itunes删除软件 编辑:程序博客网 时间:2024/06/05 04:41

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

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

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

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

原创粉丝点击