相关推荐
-
ATL Thunk技术简单解析
Thunk的基本原理是分配一段内存,然后将窗口过程设置为这段内存。这段内存的作用是将窗口过程的第一个参数(窗口句柄)替换成类的This指针,并jump到类的WinProc函数中。这样就完成了窗口过程到类的成员函数的一个转换。 ATL采用一种称为thunk的机制,简单来说,公共的窗口过程依然是类的一个静态函数,但只负责窗口的第一个消息WM_NCCREATE,其目的是在堆上开辟一小块数据区,
-
ATL Thunk机制学习
ATL模板类库使用Thunk技术来实现与窗口消息相关联的HWND和负责处理消息的对象的this指针之间的映射。 ATL中窗口类注册时,窗口过程函数缺省值都是StartWindowProc,当创建窗口产生第一条消息时将调用此函数。StartWindowProc是CWindowImplBase的一个静态成员函数,它的工作是建立CWindowImpl派生对象的HWND与对象
-
ATL中的Thunk机制学习 (转)
ATL中的Thunk机制学习 (转)[@more@]ATL利用一系列的类来管理窗口。为了使代码尽量紧凑而高效,ATL使用了一种有趣的技术来实现与窗口消息相关联的HWND和负责处理消息的对象的this指针之间的映射。具体过程如下:...
-
WTL 基础: CWindowImpl 发现
CWindow 其实只是一个数据结构或者分类。
-
C++ 通过Thunk在WNDPROC中访问this指针
本文基本只讨论原理,具体实现请参见后续文章《C++ 通过Thunk在WNDPROC中访问this指针实现细节》 当注册窗口类时,WNDCLASSEX结构的lpfnWndProc成员应设置为窗口过程函数的地址,这是一个C风格的函数指针,所以我们只能使用全局或静态函数的地址,这在我们将窗口封装为C++类时会很麻烦,因为我们无法在一个全局或静态的WindowProc函数中直接访问类实例,这就需要一些手
-
ATL中的Thunk机制学习
ATL利用一系列的类来管理窗口。为了使代码尽量紧凑而高效,ATL使用了一种有趣的技术来实现与窗口消息相关联的HWND和负责处理消息的对象的this指针之间的映射。具体过程如下: 在窗口注册时声明的窗口过程为此窗口对应的窗口类的静态成员函数StartWindowProc,当第一条消息到达此函数时,其处理如下: template LRESULT CALLBACK CWindow
-
理解ATL中的一些汇编代码
理解ATL中的一些汇编代码 我们知道ATL(活动模板库)是一套很小巧高效的COM开发库,它本身的核心文件其实没几个,COM相关的(主要是atlbase.h, atlcom.h),另外还有一个窗口相关的(atlwin.h), 所以拿来学习应该是很方便的。但是因为ATL的代码充满了模板和宏,内部还夹杂着汇编,所以如果没有比较丰富的C++模板和系统底层的知识,一般人会看得一头雾水。 下面我们
-
ATL中的Thunk机制学习
ATL中的Thunk机制学习 http://blog.csdn.net/sam1111/article/details/9790
-
ATL之thunk技术
<br /><br /><br />学习下 ATL 的 thunk<br />由于 C++ 成员函数的调用机制问题,对C语言回调函数的 C++ 封装是件比较棘手的事。为了保持C++对象的独立性,理想情况是将回调函数设置到成员函数,而一般的回调函数格式通常是普通的C函数,尤其是 Windows API 中的。好在有些回调函数中留出了一个额外参数,这样便可以由这个通道将 this 指针传入。比如线程函数的定义为:<br />typedef DWORD (WINAPI *PTHREAD_START_ROUTINE
-
ATL thunk机制
起初在DECLARE_WND_CLASS宏中可以知道,窗口类的窗口过程是CWindowImplBaseT的静态成员函数StartWindowProc,在StartWindowProc第一次被调用的时候,它把CWindowImplBaseT的非静态成员函数通过thunk机制设置为窗口过程。 template LRESULT CALLBACK CWindowImplBaseT::Start
-
ATL Thunk机制的一个例子
转自:http://blog.csdn.net/tttyd/article/details/4562233 //涂远东 2009 09 17 深圳 //声明函数类型。 typedef void (*TESTFUN)(void*); //定义修改代码的结构。 #pragma pack(push,1) struct Thunk { DWORD m_mov; // 修改参数指令
-
转:Thunk 和DEP
转自:http://blog.csdn.net/yaosan/archive/2008/06/10/2533545.aspx前几天博客中说ATL用thunk进行消息分发。当时觉得很别扭:堆栈,堆上的内存能执行?不是代码段也能执行吗?保护位什么时候设置的?后来没深究,以后得改改这毛病了,不能把疑问留一边,一定得正视了!早上起来看双杯献酒给我的评论提示我一个上述网址有答案,先谢谢他了!Thunk 和DEP 什么是 Thunk Thunk 技术就是将一段机器码对应的字节保存在一个连续内存结构里,然后把其指针强制转
-
ATL Thunk机制深入分析
如果你有SDK的编程经验,就一定应该知道在创建窗口时需要指定窗口类,窗口类中的一种重要的参数就是窗口过程。任何窗口接收到的消息,都是由该窗口过程来处理。 在面向对象编程中,如果还需要开发人员来使用原始的窗口过程这种面向过程的开发方式,面向对象就显得不那么纯粹了。所以,在界面编程的框架中,框架往往会隐藏窗口过程,开发人员看到的都是一个个的类。 如果要处理某一个消息,则需要在窗口对应的类...
-
探秘窗口过程函数(WndProc)的Thunk技术
最近看了一篇讲ATL Thunk技术的好文章(下载),收获较多,在此做一个总结。 Thunk技术的由来 我们知道,经典的Windows程序设计采用纯Windows API来实现,创建一个窗口必须严格遵循“定义窗口类,注册窗口类,创建窗口,显示窗口,更新窗口,启动消息循环”的步骤。虽然经典的Windows程序设计在一定程度上已经体现出了OOP的思想 (对象 = 数据 + 代码),但是与当代的OO
-
从源码角度理解Redux中间件---applyMiddleware
什么是中间件 在redux中,我们可以在view层dispatch一个action,action到达store中的reducer,reducer根据action的type更新处理state,从而更新store中的数据。但是redux并不能处理异步的dispatch。这时候我们就需要使用redux提供的applyMiddleware对dispatch进行增强,使我们的dispatch可以异步。 这里...