COM概述

原创 2011年01月07日 22:58:00

 

1.COM简介

COM(Component Object Model ),即组件对象模型,是一种以组件为发布单元的对象模型,这种模型使各软件组件可以用统一的方式进行交互。COM即提供了组件之间进行交互的规范,也提供了实现交互的环境,因为组件对象之间的交互规范不依赖于任何特定的语言,所以COM也可以是不同语言写作开发的一种标准。

2.COM结构

COM标准包括规范和实现两大部分。规范部分定义了组件与组件之间通信机制,不依赖于任何特定的语言和操作系统;实现部分是COM库,COM库为COM规范的实现提供一些核心服务。

2.1.COM对象和接口

类似于C++中对象的概念,COM对象时某个类的一个实例;而类则是一组相关的数据和功能组合在一起的定义。使用对象的应用(或另一个对象)称为客户。

接口是一组逻辑上相关的函数集合,其函数也被称为接口成员函数。对象通过接口成员函数为客户提供各种形式的服务。

在COM模型中,对象本身对于客户是不可见的,客户只能通过接口请求对象提供的服务。每个接口都由一个128位的全局唯一标识符(GUID,Globally Unique Identifier)来标识。客户通过GUID获得接口的指针,再通过接口指针,客户就可以调用其相应的成员函数。对象在内部实现接口提供的函数向用户提供功能。在COM模型中,对象通过接口和接口函数为客户提供服务,对于客户来讲,它只与接口打交道。

与接口类似,每个对象也用一个128位GUID来标识,称为CLSID(class identifier,类标识符或类ID)。客户程序由CLSID创建COM对象后(由此看出CLSID是对象对应类的唯一标识),得到一个指向对象某个接口的指针,因为COM对象至少实现了一个IUnknown接口,所以客户就可以调用该接口提供的所有服务。这就会想了,如果一个对象实现了多个接口,难道我们每访问一个接口就要创建一个COM对象吗,这也太不人性了吧。根据COM规范,一个COM对象如果实现了多个接口,则可以从某个接口得到该对象的任意其他接口。

2.2.客户/服务器模型

COM模型中,客户与组件的交互机制以客户/服务器模型为基础。下图为COM对客户/服务器模型的灵活运用。


 

2.3.COM库

COM本身除了规范之外,也有实现部分,其中包括一些核心的系统级代码,也正是这部分核心代码,才使得对象和客户之间可通过接口在二进制级别进行交互。

在Windows操作系统下,这些库以.dll的形式存在,其中包括以下内容: 
(1)提供少量的API函数实现客户与服务器端COM应用的创建过程。在客户端主要是一些创建函数;在服务器端,提供一些对象的访问支持。

(2)COM通过注册表查找本地服务器即EXE或DLL程序,以及程序名与CLSID的转换等。

(3)提供了一种标准的内存控制方法,使应用控制进程中内存的分配。

COM库是在操作系统层次上实现的,因此一个操作系统只有一个COM库实现,这样我们在编写COM应用时,不用编写为COM通信而必需的大量基础代码,而是直接利用COM库提供的API进行编程,从而大大加快开发速度。


 

COM编程(一) COM概述以及COM客户端

转自:http://www.cnblogs.com/coderlee/archive/2008/01/25/1052643.html COM -- 跨平台跨语言的解决方案。 这篇笔记是我学习过...
  • hemeinvyiqiluoben
  • hemeinvyiqiluoben
  • 2013年12月06日 08:57
  • 338

com组件技术概述

这篇文章对COM做出来比较完整的解释,非常好。        COM是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样功能...
  • ICE_CHB
  • ICE_CHB
  • 2016年05月07日 22:18
  • 110

【COM原理和应用】1、COM原理和概述

【我们知道,Directshow整体上是构建在COM之上的,也可以认为是COM在视频、流媒体领域的一种特定的应用和封装。如果只是为了开发High level的directshow应用,COM方面的只是...
  • shaqoneal
  • shaqoneal
  • 2015年01月31日 18:36
  • 700

COM原理笔记之一 —— 概述篇

COM(组件对象模型,Compent Object Model)是Microsoft提出来的组件标准,它不仅定义了组件程序之间进行交互的标准,并且也提供了组件程序进行所需要的环境。 一、两种进程模型:...
  • zxxSsdsd
  • zxxSsdsd
  • 2013年08月07日 08:46
  • 549

COM文件与EXE文件的区别与联系

COM文件是一种可执行程序的内存映象文件,它与只有16位地址线的8位机上的CP/M操作系统下的可执行程序结构相似。在COM程序执行过程中,除了调用DOS功能和 ROM BIOS 功能,以及用户特意安排...
  • u014304560
  • u014304560
  • 2015年09月24日 19:18
  • 1627

浅谈Android之系统概述

先来看下Android SDK第一篇文章 What is android中一张描述Android系统结构的图: 基于这张图,可以很清晰的看出android的框架结构,最顶上是各种各样的应用,应...
  • zhejiang9
  • zhejiang9
  • 2017年02月14日 10:37
  • 214

VC调用COM组件的几种方法

这篇的内容也是我在使用COM组件的时候遇到困难后在网上找的一些调用的方法,以备后用。 1.首先创建一个COM组件:myCom.ocx    组件里面有一个普通接口:ImyCom   一个方法为:Hel...
  • u013823973
  • u013823973
  • 2014年12月26日 14:42
  • 1843

mySql数据库概述

一、数据管理技术与其发展阶段 1、人工管理阶段 • 数据不能长期保存 • 程序本身管理数据 • 数据不能共享  • 数据不具有独立性 2、文件系统阶段 • 数据可以长期保存 ...
  • limm33
  • limm33
  • 2016年08月31日 08:48
  • 579

C++ COM组件编写初探

最近在学习COM,自己实现了一个小Demo,拿出来和大家分享一下。求各种批评。 我实现的这个组件向外提供了一个接口ICompTest,里面只有一个函数helloworld(),功能为返回一个整数...
  • shejiannan
  • shejiannan
  • 2014年05月20日 17:41
  • 851

启动COM组件的三种机制

这里的COM组件可以是一个进程内服务器(In-Process Server),也可以是一个进程外服务器(Out-Of-Process Server)。一般情况下,我们在使用这些COM组件的时候,只要保...
  • sunnylion1982
  • sunnylion1982
  • 2013年11月21日 17:24
  • 2080
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:COM概述
举报原因:
原因补充:

(最多只允许输入30个字)