Thunk 和 ATL Thunk?
有人可以向我解释一下 Thunk 是什么吗?
和 ATL Thunk?
我知道 thunk 与 vtbl 和代码执行有关以找到正确的函数指针。我说得对吗?
Can someone explain to me what a Thunk is?
and an ATL Thunk?
I know a thunk has something to do with the vtbl and execution of code to find the right function pointer. Am I right?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
它是从根本上改变执行环境的一段适配器代码的通用术语。我第一次看到它是在 16 位到 32 位 Windows 过渡期间使用的,thunk 用于允许在 16 位模式下运行的代码调用 32 位代码。
ATL thunks 也有类似的东西。它知道如何将 Windows 回调(一个只有窗口句柄来区分上下文的纯 C 执行环境)转换为类对象上的虚拟方法调用。 thunk 负责将窗口句柄映射到包装它的 ATL 类实例,并将消息号转换为相应的虚拟方法。
It is a generic term for a piece of adapter code that fundamentally changes the execution environment. I saw it first being used during the 16-bit to 32-bit Windows transition, a thunk was used to allow code that was running in 16-bit mode to call 32-bit code.
Something similar for ATL thunks. It knows how to turn a Windows callback, a pure C execution environment with nothing but a window handle to distinguish the context, into a virtual method call on a class object. The thunk takes care of mapping the window handle to the ATL class instance that wraps it, and translate the message number to the corresponding virtual method.