要深入了解 COM 的话,建议步骤:1、忘记跟 Delphi VCL/CLX 相关的东西; 2、拿一本《COM本质论》[ISBN: 7-5083-0611-2] 啃; 3、用 C++ 或者 Delphi(仅)调用 Windows API 调用一个 COM 对象; 4、用 C++ 或者 Delphi(仅)调用 Windows API 实现一个 COM 对象; 5、回头看看 Delphi VCL 对 COM 的封装。如果真能理解 COM 的本质,那恭喜你,在 Windows 平台上,你无敌了。 你会发现,MS 做的东西太强大了,而你通过 COM(和消息)几乎什么都能控制。
API 是 Windows 常见三种控制方式(API/消息/接口)中最容易掌握的,所以懂了 COM(和消息),那 API 也不成问题。至于 “COM并不能超越系统APIs而存在,它只是对某些功能做的一个提供标准接口的封装。 尽管它的接口极力模仿面向对象方式,但可惜并不是真正的面向对象方式。” 这两句话不敢苟同。建议看看 Charlie Kindel 在《COM本质论》写的序言。还有 COM 强调的是 COP 而不是 OOP 。OOP 有优点,有缺点。在大型工程开发和产品升级 更替中 OOP 的问题更是明显。Charlie Kindel 序明确指出了 COP 和 OOP 的区别。
www.vclxx.org上有许多Vcl的代码可以研究,虽然版本低,但理论是一样的。最大的好处是直接,实在
2、拿一本《COM本质论》[ISBN: 7-5083-0611-2] 啃;
3、用 C++ 或者 Delphi(仅)调用 Windows API 调用一个 COM 对象;
4、用 C++ 或者 Delphi(仅)调用 Windows API 实现一个 COM 对象;
5、回头看看 Delphi VCL 对 COM 的封装。如果真能理解 COM 的本质,那恭喜你,在 Windows 平台上,你无敌了。
你会发现,MS 做的东西太强大了,而你通过 COM(和消息)几乎什么都能控制。
本质就是通过一个标准接口为其他程序提供服务,但是ms的接口设计太笨拙,性能低下,已经回天无力了。
“通过 COM(和消息)几乎什么都能控制”这句话就表明你没有理解COM的本质。:)
COM并不能超越系统APIs而存在,它只是对某些功能做的一个提供标准接口的封装。
尽管它的接口极力模仿面向对象方式,但可惜并不是真正的面向对象方式。
这句话说得有点过吧,谁说COM已经过时了?
COM(和消息),那 API 也不成问题。至于
“COM并不能超越系统APIs而存在,它只是对某些功能做的一个提供标准接口的封装。
尽管它的接口极力模仿面向对象方式,但可惜并不是真正的面向对象方式。”
这两句话不敢苟同。建议看看 Charlie Kindel 在《COM本质论》写的序言。还有
COM 强调的是 COP 而不是 OOP 。OOP 有优点,有缺点。在大型工程开发和产品升级
更替中 OOP 的问题更是明显。Charlie Kindel 序明确指出了 COP 和 OOP 的区别。
APIs和消息机制是Windows提供的最基本的服务层,
而COM是更高层次的抽象。
“通过 COM(和消息)几乎什么都能控制”根本就是胡说八道,
你用COM动态装载一个设备驱动看看?
还不是要使用APIs?
“COM 强调的是 COP 而不是 OOP 。OOP 有优点,有缺点。在大型工程开发和产品升级更替中 OOP 的问题更是明显”?
明显在哪里?
既然如此,为什么ms还是在.net framework中用纯面向对象的机制取代了基于函数的APIs/Messages/COM这些东西?
想要资料给我发邮件。
[email protected]
COM 接口和消息比 API 要花更多精力来学习。请平心静气地理解了别人的观点再来反驳,否则
交流上会有很大困难,DelphiGuy 你说是不是?COM 是 1993 年首发的,至今已 12 年了。
由 COM 支持的 MS 技术不断升级,依然被广泛使用。至于 .net framework 能不能取代 Win32 的位置,
我们就不要讨论了。DelphiGuy 是个 .net 迷还是个 Delphi 迷?
不过COM这种东西连ms都承认要“淡出”,
你再继续吹捧它就没什么意思了。
“依然被广泛使用”那只是因为推倒重来的代价太大。
我既不是.net迷也不是Delphi迷,
我只是喜欢Delphi,
认为它能够代表开发工具的发展方向和技术进步。
至于我个人,
还工作在wordpad、vi+cc的状态。:)
好多问题解决不了,或者说即使可以解决,Borland
目前也没有声称要解决它。典型的有:
纯 unicode 的 Win32 VCL 就是一个重要的需求。
还有就是 VCL 和非 VCL 的窗口进行互动时出现的问题。你可能会问,用 .net VCL 不就 OK 了么?
但是用 .net 的话,我还用 VCL 干什么?
VCL 套 .net Framework 不是增加出问题的几率嘛?另一方面 .net 的适用范围是有限的。我想,Abobe
是不会把它的 PhotoShop 移植到 .net 上的吧。
暴雪开发 WOW 会用 .net 而不用 Win32 么?上面两个方面说明了一个问题,个人感觉上,现在的
Delphi 有点低不成高不就了。(我不是想伤害大家对 Delphi 的感情,而是觉得
Borland 实在不争气,当年丢了数据库,现在丢了
快速开发工具。我工作用的 Delphi 还是正版的呢!)最后,我认为 pascal 是最优美的编程语言,这个跟
VCL 是两件事。