需要帮助了解我为什么应该使用COM吗

需要帮助了解我为什么应该使用COM吗,com,Com,我很难弄清楚什么时候应该使用COM。我读了一些书,但我根本找不到一个可靠的使用它的案例……我浏览了互联网,试图找出什么时候和为什么我应该使用它,但这个概念太抽象了,我不明白 我了解了当编写可以从各种支持COM()的编程语言中使用的代码时,使用COM是多么有趣。但是我很想得到一些关于COM何时被使用以及为什么它不能以另一种方式实现的实例 有没有人能列举一些真实的例子,说明使用COM比编写DLL更有意义 抛开COM的多语言特性不谈,哪种功能通过传统功能导出 例如,我知道COM在围绕Microsoft

我很难弄清楚什么时候应该使用COM。我读了一些书,但我根本找不到一个可靠的使用它的案例……我浏览了互联网,试图找出什么时候为什么我应该使用它,但这个概念太抽象了,我不明白

我了解了当编写可以从各种支持COM()的编程语言中使用的代码时,使用COM是多么有趣。但是我很想得到一些关于COM何时被使用以及为什么它不能以另一种方式实现的实例

有没有人能列举一些真实的例子,说明使用COM比编写DLL更有意义
抛开COM的多语言特性不谈,哪种功能通过传统功能导出


例如,我知道COM在围绕Microsoft Office产品的开发中被大量使用……这是为什么?

Discoverability.Re:Microsoft Office产品。我认为COM主要用于多语言方面(您希望搁置的部分)。Microsoft Office产品还大量使用Visual Basic(特别是其方言Visual Basic for Applications,简称VBA)编写脚本,因此开发人员需要一种机制来编写可从VBA使用的组件。从某种意义上说,COM只是通过“传统函数”导出功能的一种方便方式。COM接口只是一个指向函数的指针表。它是由“传统”导出函数引导的,如
DllGetClassObject
。您甚至可以用C编写COM组件,在没有编译器帮助的情况下手动设置vtables;如果你将它与dllexports相比较,COM允许你使用二进制组件(而不是源代码)构建丰富的面向对象的层次结构/域。一旦发布,事实接口就可以进行版本控制(在不更改调用方的情况下更改二进制文件)。与元数据/运行时信息工具(tlb、winmd等)相关联,它比导出/导入更易于使用。许多Windows API都基于COM(DirectX和相关技术使用最简单的COM-vtables形式)。新的WinRT API也是基于COM的。“如果你把多语言方面放在一边……”。不,这就是全部。微软使用C++开发其应用程序和库,但希望使它们能够应用于任何开发人员喜欢的语言。这是个问题,C++没有。当你混合语言时,你真的需要一个,COM提供了它。