对COM技术的体会

330 篇文章 ¥19.90 ¥99.00
本文探讨了COM技术的优势和误解,强调了它在二进制代码重用和跨工具平台上的价值。虽然COM开发可能存在一定的复杂性,如组件注册、GUID等,但通过ATL或巧妙的编程技巧,可以简化开发过程。COM在微软Office等应用中的成功证明了其在实现复杂业务功能方面的潜力。.NET虽然提供了新的开发框架,但COM的基础思想仍然重要,并非被完全替代。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实COM是一项非常不错的开发技术的,它是一种框架,在这个框架下你有很多实现的自由。
加上它是二进制代码级别的重用,可以被不同的开发工具使用,或其他非编译型语言的使用。
COM技术思想是非常有用的,通过接口来统一处理问题,使得代码的实现上具有很大的灵活性,
在C和C++的编程环境下,这个优势更大。在组件应用中接口指针的处理是很重要的,所以非
编译的和不支持指针的开发工具或语言在效率上是有点损失,但是这是没办法的,因为这些不
支持指针的环境,只能通过折中的方式来间接的实现了指针的功能。如果你的应用不考虑其它
的比如跨语言使用,那么建议使用C++编写应用程序是最好的,这种实现的好处是不用考虑组件
的调度问题,指针处理是C++的强项。

我想给大家澄清几个对COM认识的误区:
(1)COM会不会过时,为什么现在COM用得不多了,市面它是书籍少了。用COM实现一个系统太难了。
其实这些都问题都是对COM不够深入造成,COM不会过时也不会消失,除非你不用微软的操作系统。
COM在开发上确实有点繁琐,这跟微软早期设计是相违背的。当时微软设计COM的初衷是,开发方便快捷
代码高度可重用,系统更新维护方便等。因为这些要求的存在,在计算机世界里要么用空间来换时间
要么用时间来换取空间,所以COM组件的在运行的时候需要一些额外的辅助才能实现它当初设计的初衷。
这就有了COM组件的注册、GUID、类厂、接口指针、重要的三个接口IUnknown、IClassFactory、IDispatch
及套间的等等。开发一个COM组件需要GUID,组件的类厂实现、实现组件自己IUnknown接口或IDispatch.这些工作
如果都由程序去实现的话确实是一个耗费时间的工作,但是微软为COM组件的实现提供了COM的快速开发技术
就是ATL,其实不用ATL用编程的技巧实现一个灵活公用处理组件的类厂的代码也是可以的。组件的类厂代码基本都
一样的,所以COM并不像有些人认为的那样一说COM就跟ATL联系在一起,说其怎么难学怎么难用。COM跟ATL基本就是
两码事,通过ATL能非常方便我们开发COM组件,不用ATL也能快速开发COM组件,方法就是利用编程的技巧,
实现类厂,这些代码作为独立的一个***.h和***.cpp文件然后在开发的别的COM组件时候工程包含这些工程文件就OK了。
还有一个就是组件的注册代码也可以对立成单独的***.h和***.cpp文件,剩下的就是GUID了,使用VC提供的GUID生成器,
生成GUID,按照需要的格式拷贝出来在组件的代码使用就OK了。如果是用ATL的话当然是很方便啦,IDE自动处理了一些工作。这些工作基本上和我说的不通过ATL创建COM组件一样的。COM组件编程难呼?不会者自然难,会者当然不难。

(2)很多人说COM很难很神秘,都对COM怀有一种莫名发恐惧,担心自己能不能搞点。
这就是为什么很多人不太乐意用COM来做开发的主要原因了。其实接触过COM和了解COM实现过程的人都不会这么说。
有人也怀疑COM组件真的能实现我想要的东西吗?呵呵别忘了COM是种技术,借助它可以实现很你想要的东西。
微软的office好用吧,呵呵一贯的界面风格,统一的处理方式。它就是用COM技术实现的。

(3)COM技术能否实现我的业务功能呢?
COM技术本身就提供了一种天然分块的开发模式,定义各个部分的调用接口后,就可以同步进行开发了,
因为COM组件重要的东西就接口,只要业务系统分析搞好了,分好块了借助COM技术一样把系统快速的
开发出来,把各个模块划分合理得当,甚至比其它开发方式还快,因为各个部分模块通过接口调用,
这样以来业务系统所有模块都可以同时进行开发,不需要等待别的组员开发出来一个模块后下一个
模块开发才能进行。COM组件在系统中可以轻易的被提换而不需要将整个系统重新编译,这为系统的
维护和升级提供一个天然好条件。也许有人会说我使用DLL技术,不也可以吗?确实使用DLL也能实现
系统,但是DLL如果能解决所有问题的话,COM就不必要存在了,大家不要把COM跟DLL搞混了。

(4)有人说有.net就不必要用com了。
我没必要去驳斥这样的观点,因为.net技术来自于COM,.net借助Java的一但编写到处可以运行的思想。
其实.net未必把所有的问题都解决了。COM技术的思想不同于一般的过程或者面向对象开发思想。
COM关注的是接口,而我们的业务系统关注的是业务实现,而借助COM技术开发的系统是通过接口的实现
来实现业务功能。COM在某种程度上有种天然的条件去辅助业务系统的实现。要把这些优势体现出来,
必须有个好的系统构架师和系统分析师。系统模块划分要合理,边界调用接口设计要合理,如果这些
都没搞好的话使用COM技术开发确实会很累人,开发进度反而不如其他的方法。大家不要把造成这样的结果
的原因归咎于COM技术。这是人的因素造成的,也是很多公司不太乐意使用COM做开发的原因了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值