﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Error-文章分类-WTL 征程</title><link>http://www.cppblog.com/Error/category/17517.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 07 Aug 2011 12:03:42 GMT</lastBuildDate><pubDate>Sun, 07 Aug 2011 12:03:42 GMT</pubDate><ttl>60</ttl><item><title>先要学习ATL</title><link>http://www.cppblog.com/Error/articles/152696.html</link><dc:creator>Enic</dc:creator><author>Enic</author><pubDate>Sun, 07 Aug 2011 00:32:00 GMT</pubDate><guid>http://www.cppblog.com/Error/articles/152696.html</guid><wfw:comment>http://www.cppblog.com/Error/comments/152696.html</wfw:comment><comments>http://www.cppblog.com/Error/articles/152696.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Error/comments/commentRss/152696.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Error/services/trackbacks/152696.html</trackback:ping><description><![CDATA[<div>CWindow 封装了一个HWND，包装那些对窗口句柄操作的API。没有其他多余的动作。析构的时候不会自动销毁HWND<br />CWindowImpl三个模板参数，第一是窗口类，第二个默认是CWindow，第三个是窗口类型。<br /><br /><br />class ATL_NO_VTABLE CMessageMap<br />{ <br />public:<br />&nbsp;virtual BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam,<br />&nbsp;&nbsp;LRESULT&amp; lResult, DWORD dwMsgMapID) = 0;<br />};<br />atl的消息map基类，，，<br /><br /><br />牛逼神奇其实就那样的trunk技术：<br />在StartWinproc函数中完成trunk结构的初始化，保存有自己的指针。（_AtlWinModule先藏到这里，然后，，，）<br />然后就是用trunk代码（和内存hook类似的手法直接写机器码）地址，替代函数地址，当cpu准备去调用这个地址的函数时自动调用机器码，根据分析这里的机器码将函数的参数改变了，用和HWND关联的CWindowImplBaseT地址作为了HWND传入回调，这样就有了对象指针了，do whatever you like,,,<br /></div><img src ="http://www.cppblog.com/Error/aggbug/152696.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Error/" target="_blank">Enic</a> 2011-08-07 08:32 <a href="http://www.cppblog.com/Error/articles/152696.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>