WHY COM?
2007-06-01 13:03
[c++, google]
为何很多大型程序都使用了COM?
COM 对程序有什么价值?
使用了COM作为框架的程序:
我的机器上安装了一些Google的程序,我查看了一下:
-
common/update/:
goopdate.idl
UpdaterService.idl -
Google Desktop Search/:
GoogleDesktopActions.idl
GoogleDeskband.idl
GoogleDesktopAPI2.idl
GoogleDesktopDisplay.idl
GoogleDesktopIndex.IDL
GoogleDesktopSSD.IDL
GoogleUIEngine.IDL -
Google Earth
googleearth.IDL -
Google Talk
googletalk.IDL
swg.IDL -
Google Toolbar
googletoolbar3.IDL -
RealPlayer SDK
IRMAPlayer
有必要说明的是很多程序为了和IE,Shell交互必须使用COM实现一些接口,如 Google Toolbar,但是有些程序为了暴露API給开发者也使用了COM,如GoolgeTalk, RealPlayerSDK,MSN等。
编写小程序的确不应该用COM,依赖注册表,还有TypeLibrary等问题,的确不划算。但是有复杂进程通讯,复杂界面和逻辑交互的程序使用COM的确有不少好处:
- 几乎能在任何需要的地方方便的得到任何需要的对象。避免使用可耻的全局变量。
- 不用担心对象生存期和泄露问题,COM内置的引用计数解决了这个问题,当然接口泄露也会开始折磨程序员。
- 接口定义是强制性的了。
我个人倾向于使用COM,但是应该避免使用注册表,复杂的ConnectionPoint等技术。