1. 程式人生 > >幾句話概括atl thunk技術

幾句話概括atl thunk技術

ATL的thunk技術過一段時間不看就忘記他是怎麼實現的,現在概括為幾句話,方便記憶.

CreateWindow時,第一個callback是在同一個堆疊裡的,不是非同步的.所以可以得到視窗對應的類的this指標.後續的callback則是非同步的,得不到對應的視窗物件指標.怎麼辦呢,這時就用到thunk技術.

thunk就是在資料段模擬了一個WNDPROC的結構,但中間做了手腳,用 this指標替換了WNDPROC的HWND引數.然後把這個WNDPROC設成callback的視窗過程.

順便說一句,vc6時是在棧上模擬這個callback函式的,所以會有windows資料執行保護的問題,vc2003後則是在堆上模擬的,不會有這個問題. 想在 vc6上解決這個問題可以修改atl的原始碼,把thunk這段記憶體置為可執行許可權.