C++ 选择com的原因

C++ 选择com的原因,c++,com,C++,Com,我想知道为什么有人会选择Com作为他的软件开发“技术” 我的第一个想法是机器/编程语言独立性 您的目标是什么?COM是windows上的自动化和IPC的事实标准(尽管.Net已经开始转移重点),因此有些领域您没有(或曾经)选择: 外壳扩展 ActiveX构建在COM上 Internet Explorer扩展 扩展MS Office应用程序 JScript、VBScript等的脚本能力。。。用一个二进制 在.Net事件之前,几乎所有MS应用程序的自动化都是通过COM实现的,相当多的公司也加入了

我想知道为什么有人会选择Com作为他的软件开发“技术”

我的第一个想法是机器/编程语言独立性


您的目标是什么?

COM是windows上的自动化和IPC的事实标准(尽管.Net已经开始转移重点),因此有些领域您没有(或曾经)选择:

  • 外壳扩展
  • ActiveX构建在COM上
  • Internet Explorer扩展
  • 扩展MS Office应用程序
  • JScript、VBScript等的脚本能力。。。用一个二进制
在.Net事件之前,几乎所有MS应用程序的自动化都是通过COM实现的,相当多的公司也加入了这一行列


此外,如果您愿意将自己局限于windows,DCOM是一种可靠且经验证的分布式组件技术。

正如gf所说,人们使用它实现自动化。此外,大部分窗口只能作为COM对象访问。DirectX就是一个例子

COM的主要优势在于它是一种广泛适用的互操作技术

  • COM在Windows上得到了很好的支持,无需安装任何东西
  • 它为托管/非托管应用程序和不同语言的应用程序的各种组合提供了丰富的互操作功能—客户端不关心服务器如何工作,反之亦然
  • <> LI>如果您已经有一个大的非托管代码库(例如,我们有数百万行C++代码),并且希望将其功能暴露给各种语言的客户端,COM肯定会是您的选择。ATL使得创建COM服务器非常容易,并且客户端可以不用额外的努力就能使用。
  • 不要忘记COM+,如果您有一个32位非托管的in-proc COM服务器,并且希望将其公开给64位客户机,那么COM+非常棒——很多时候,您只需单击几下鼠标,根本不需要编写任何新代码
  • COM支持线程模型(有关详细信息,请参阅),该模型允许您决定需要从COM组件中获得多少可伸缩性以及愿意为此支付多少费用,并且没有客户端能够滥用您的组件并因并发访问数据而受到伤害

    • 我的第一个想法是——不要!!!如果您可以远离COM/DCOM

      当然,如果您需要与传统应用程序集成,您将别无选择,但即使使用COM,也只能跨越托管/非托管边界

      如果旧版兼容性不是问题-请保持管理。NET拥有COM所能提供的一切,还有一些。NET代码的复杂性和稳定性与等效的COM代码相比是微不足道的


      我已经使用VisualStudio集成有一段时间了。最初它都是COM,但MS慢慢地将它的各个部分转换为托管。基于MEF的新编辑器框架将必要的代码量减少了几个数量级。而且不要弄乱注册表。这让我松了一口气。

      我认为现在使用COM的唯一正当理由就是处理遗留的东西。如果我错了,请纠正我,但是.NET是否取代了COM?是否尝试过从本机应用程序使用.NET?;)