选择使用COM的原因是什么?

4
我想知道为什么有人会选择Com作为他的软件开发“技术”。
我第一个想法是机器/编程语言的独立性。
你呢?

1
我认为现在使用COM的唯一有效原因是处理遗留问题。如果我错了,请纠正我,.NET难道不是取代了COM吗? - R. Martinho Fernandes
3
尝试过在本地应用程序中使用 .Net 吗? ;) - Georg Fritzsche
4个回答

9

COM是Windows上自动化和IPC的事实标准(尽管.NET已经开始转移重点),因此有些领域你根本没有选择:

  • Shell扩展
  • ActiveX构建在COM上
  • Internet Explorer扩展
  • 扩展MS Office应用程序
  • JScript、VBScript等的可脚本性,使用一个二进制文件

在.NET出现之前,几乎所有MS应用程序的自动化都是通过COM完成的,许多公司也沿用了这种方式。

此外,如果你愿意局限于Windows平台,DCOM是一项可靠且经过验证的分布式组件技术。


2
COM的主要优势在于它是一种广泛适用的互操作技术。
  • 在Windows系统上,COM得到了非常好的支持,无需安装任何内容。
  • 它为各种托管/非托管应用程序和使用不同语言的应用程序提供了丰富的互操作能力——客户端不关心服务器的工作方式,反之亦然。
  • 如果您已经拥有大型非托管代码库(例如我们拥有数百万行的C++代码)并希望向客户端公开其功能以供多种语言使用,则COM绝对是您的选择——ATL使创建COM服务器非常容易,客户端将能够在没有额外努力的情况下使用。
  • 别忘了COM+,如果你有一个32位非托管In-proc COM服务器并想将其暴露给64位客户端,COM+是非常好的选择——很多时候你只需要几个鼠标点击,根本不需要编写任何新的代码。
  • COM支持线程模型(详见这篇文章),让您决定您的COM组件需要多少可扩展性,以及愿意为此付出多少代价,而且没有客户端能够滥用您的组件并因对数据的并发访问而受伤。

0
正如gf所说,人们使用它进行自动化。此外,Windows的大部分内容只能作为COM对象访问。DirectX就是一个例子。

0

我的第一反应是——不要!!!如果可以避免使用COM/DCOM,就尽量避免。

当然,如果你需要与旧应用程序集成,那么你别无选择,但即使如此,也只使用COM来跨越托管/非托管边界。

如果旧应用程序的兼容性不是问题,那么请使用托管代码。.NET拥有COM所能提供的一切,甚至更多。而且,.NET代码的复杂性和稳定性远不及等效的COM代码。

我已经在Visual Studio集成方面工作了一段时间。最初都是COM,但微软逐渐将其各个部分转换为托管代码。基于MEF的新编辑器框架将必要代码的数量减少了数倍。而且不需要再去操作注册表。这真是一种解脱。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接