组件对象模型

来自站长百科
(重定向自Com
跳转至: 导航、​ 搜索

组件对象模型,也称组件对象模型,英文为Component Object Model,缩写COM,是微软对于网页服务器客户端、增益集与Office系列软件 之间交互的一项软件组件技术。

自动化是指应用程序的COM化来让外部可以调用它们的功能,以及外部调用这些功能的方法。自动化的典型应用是微软的很多软件中都支持的。由于自动化普遍使用OLE的标准接口来实现,所以这个技术有时也称OLE自动化。

历史[ ]

Windows操作系统提供了三种应用程序间的通信机制:剪贴板(clipboard)、DDE与OLE。OLE原名是对象连接与嵌入(Object Linking and Embedding),OLE可说是DDE的改良版,OLE 1.0版提供复合文档(compound document)处理。但过于复杂,Brockschmidt, Kraig“Inside OLE”一书中提到,必须经过六个月的心灵混沌期,才能了解OLE是什么。因此OLE 2.0后,微软提出COM架构。所有OLE组件皆是继承COM而来,这些技术包含OLE Document和OLE Controls、Drag and Drop等。

概要[ ]

COM是微软自1993年便提出的组件式软件平台,用来做进程间通信(Inter-process communication, IPC)以及当作组件式软件开发的平台。COM提供跟编程语言无关的方法实现一个软件对象,因此可以在其他环境中运行。COM要求软件组件必须遵照一个共同的接口,该接口与实现无关,因此可以隐藏实现属性,并且被其他对象在不知道其内部实现的情形下正确的使用。

COM并被实现于多个平台之上,并不限于Windows操作系统之上。但还是只有Windows最常使用COM,且某些功能已被目前的.NET平台取代。

COM组件类型[ ]

COM 是基于组件对象方式概念来设计的,在基础中,至少要让每个组件都可以支持二个功能:

  • 查询组件中有哪些接口
  • 让组件做自我生命管理,此概念的实践即为参考计数 (Reference Counting)

这二个功能即为 COM 的根:IUnknown 接口所提供的IUnknown::QueryInterface(),IUnknown::AddRef() 及 IUnknown::Release() 三个方法的由来。所有的 COM 组件都要实现IUnknown,表示每个COM组件都有相同的能力。

只由COM派生实现出来的组件,称为纯 COM 组件。

但在 Windows 持续发展时,Visual Basic 4.0 开始支持 OCX,也就是 OLE Custom Control,这让微软开始思考要如何让 COM 组件可以跨语言支持,在这样的要求下,必须要提供一个一致的接口,以及提供一组可以调用接口内方法的能力,由于纯 COM 组件只能够支持 C/C++ 的直接访问,为了要达到跨语言的能力,在 COM 中必须要支持在外部调用内部方法的机能,这个机能造就了 Invoke() 方法,另外为了跨语言的支持,COM 应该要提供简单的组件访问识别方式,这也就是会有 GetIDsOfNames() 的原因,将这些方法组合起来,定义出的必要接口,称为 IDispatch 接口,所有实现此接口的,都可以支持跨语言的支持。

微软将实现此接口的组件都称为自动化 (Automation) 组件。

相关技术[ ]

COM曾是Windows平台下主要的软件开发平台,并且影响至其他许多相关软件技术。

COM+[ ]

主条目:微软组件服务

COM+ 是微软 Windows 2000 中,Microsoft Transaction Server 的强化实现版本,除了提供基本的组件交易支持外,还提供了松散藕合式事件 (loosely-coupled events) 与对象共用池 (object pooling) 等应用程序服务器的能力,成为 Windows 2000 开始在微软平台上主要的应用程序服务器平台,目前 .NET Framework 也提供了 System.EnterpriseServices 命名空间以支持 COM+。

设备上下文OM[ ]

主条目:Distributed COM

设备上下文OM 是可以在网络上通信的COM组件,依据RPC(Remote Procedure Call)的规范来发展的,它将COM组件的能力扩及到网络上,但是因为网络安全以及防火墙的问题,让设备上下文OM无法广泛的流行。

.NET[ ]

主条目:.NET Framework

.NET Framework 是新一代的Microsoft Windows应用程序开发平台。

禁用com组件可能导致的问题[ ]

  • 在线播放功能的组件被禁用,会导致在线电影等在线视频无法正常观看;
  • 在线杀毒功能的组件被禁用,会导致在线杀毒不能使用;
  • 在线游戏功能的组件被禁用,会导致在线游戏无法玩,
  • com组件禁用后的具体情况,需要根据具体的com组件功能作判断。

相关条目[ ]

参考来源[ ]