走进IE编程 (3)真的需要精通ATL吗?

yjgx007 2009-06-26 11:28:11
加精
基本上IE编程是围绕着ATL框架展开的, 所以, 我们不得不面对ATL说点什么,
ATL是一个基于COM(组件对象模型)SDK的框架库,如果你甚至连COM都不知道是什么,建议先阅读一些有关COM的技术书

籍(注1), 大致了解下COM出现的原因,目的,了解什么是类厂及意义,COM对象是怎样被创建和调用,以及引用计数

的维护等. 最后,写几个简单的COM调用程序就可以了,如果你想更深入地理解COM,也不是短时期就能有所成效的,

幸运的是ATL框架库就是最好的示例.
ATL封装了类厂管理类 - CComCoClass, 引用计数管理类 - CComObjectRootEx, 事实上, 当你在Visual Studio

可视化开发环境中, 添加一个简单的COM对象类时, 你可以看到它是从CComCoClass, CComObjectRootEx派生的.

而最终COM对象的创建是由CCOMMoudle类完成的,具体根据全局静态的COM映射表,然后调用CComModule::Init

(...). 所以, 你再也不用原始的方法去创建类厂, 对全局和局部对象引用计数的管理, 所有这一切ATL的类框架

已经帮你完成了, 所有你需要做的就是从这些基类派生自已的COM对象类, 更为幸运的是VS集成开发环境已经帮

助我们自动完成了初始代码的创建, 一个典型的案例就是在你的工程中添加一个新的COM对象.

上面说了这么多, 其是, 只是简单地讲了下COM和ATL的关系, 事实上, 要将晦涩的每个技术问题解释的相当清楚

, 已超出本文的范围, 附注推荐的书籍将帮助你打开这第一扇门(实际上你可能只需阅读前面几个章节, 了解一

下why > what > how就足够了).

如果说ATL是IE编程的壳, 那么IE事件的交互, 对IE接口的实现(implementation), 就是IE编程的血肉部分. 说

到事件交互, 就不得不谈到IE是怎样传递事件到你自定的事件接收器(sink), 这是由事件连接点(connection

point)完成的, 以后我们将进一步接触这个问题. 另一方面, 对IE接口的实现也正是开发IE插件的精髓, 诸如,

工具条(toolbar), 工具按钮(button), 侧边栏(sidebar)等. 稍后, 我将一一讲到.

总而言之, 精通ATL/COM是完全没有必要的, 从表象上去大致理解下COM对象的创建,管理,事件接收,接口的实现

就可以了, 如果要深入理解COM在基于组件(component)的软件开发中的优势和好处, 建议你再去深入阅读<<COM

技术内幕>>(注1).


注1: <<COM技术内幕>> 潘爱民译.
<<ATL开发指南>>

...全文
529 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
leechiyang 2010-01-29
  • 打赏
  • 举报
回复
leechiyang 2010-01-29
  • 打赏
  • 举报
回复
赞一个!!!!
xjchilli 2010-01-28
  • 打赏
  • 举报
回复
还有下文吗
guoxyj 2009-10-25
  • 打赏
  • 举报
回复
楼主写的太慢了
r_swordsman 2009-06-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yjgx007 的回复:]
引用 8 楼 r_swordsman 的回复:
ATL是一个基于COM(组件对象模型的框架库
???



ATL是一个基于COM(组件对象模型)SDK的用于创建COM框架库,

已修正,谢谢.
[/Quote]

ATL是一个基于COM SDK
??
bbmaler 2009-06-27
  • 打赏
  • 举报
回复
很深奥 有点。。。
yjgx007 2009-06-27
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 r_swordsman 的回复:]
引用 9 楼 yjgx007 的回复:
引用 8 楼 r_swordsman 的回复:
ATL是一个基于COM(组件对象模型的框架库
???


ATL是一个基于COM(组件对象模型)SDK的用于创建COM框架库,

已修正,谢谢.


ATL是一个基于COMSDK
??
[/Quote]
不是吗?有问题请发表看法,谢谢。
ljz888666555 2009-06-26
  • 打赏
  • 举报
回复
顶.
madengfei1 2009-06-26
  • 打赏
  • 举报
回复
sulijuan0 2009-06-26
  • 打赏
  • 举报
回复
呵呵
j8daxue 2009-06-26
  • 打赏
  • 举报
回复
o
lizhichen9384 2009-06-26
  • 打赏
  • 举报
回复
顶你 哈哈
aranjuze 2009-06-26
  • 打赏
  • 举报
回复
hehe
wsq279024988 2009-06-26
  • 打赏
  • 举报
回复
支持一下啊
yjgx007 2009-06-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 r_swordsman 的回复:]
ATL是一个基于COM(组件对象模型的框架库
???

[/Quote]
ATL是一个基于COM(组件对象模型)SDK的用于创建COM框架库,

已修正,谢谢.
r_swordsman 2009-06-26
  • 打赏
  • 举报
回复
ATL是一个基于COM(组件对象模型)的框架库
???
r_swordsman 2009-06-26
  • 打赏
  • 举报
回复
ATL是一个基于COM(组件对象模型)的框架库
???
nwao7890 2009-06-26
  • 打赏
  • 举报
回复
真为ATL的一个组件发愁呢,晕,烦
fang00y 2009-06-26
  • 打赏
  • 举报
回复
kan kan~~

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧