Chinaunix首页 | 论坛 | 博客
  • 博客访问: 560006
  • 博文数量: 155
  • 博客积分: 4015
  • 博客等级: 上校
  • 技术积分: 1625
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-18 16:55
文章分类

全部博文(155)

文章存档

2009年(20)

2008年(39)

2007年(66)

2006年(29)

2005年(1)

我的朋友

分类: WINDOWS

2007-06-26 10:18:13

  COM(Component Object Model)学习是比较难的,也曾看到一些关于COM的文章,很多不错的程序员都在这上面迷失了。也有很多程序员走了很多弯路才真正了解COM。
  最近也在学习COM,看的是《COM原理与应用》,潘爱民著作的。之所以叫COM学习漫谈,有两个原因:一是因为我只是把我学习和了解的概念用文字记下来,这只是我的理解,不保证是正确的(推责任呗!)。二是,我只是讨论COM的一些主要概念,只是泛泛的谈谈。
 
  一,怎么想起来搞COM的。
  早些时候并没有COM。
  有些程序员想把一个文档贴入(嵌入)至另一个文档中。例如我们现在可以将Word贴入Excel,或是将Excel贴入Word中。这在当时是不可能的,与是程序员开始思考了。
  思考的结果是采取[复合文档],也即文档是复合的,一个文档可以由Word+Excel复合而成。这个技术经过发展和泛化,形成了第一代的OLE(Object Linking and Embedding)。我们以后称其为[OLE1]
  复合文档虽解决了文件的嵌入问题,但后来发现很多方面都存在这样的问题,像程序与程序模块间也很难相互链接或嵌入。于是想制定一种标准,可以让程序间,模块间,文档间......都可以相应链接和嵌入。这个标准既是:COM标准。
  标准制定出来了,意味着大家都必须按照标准来行事。当然[OLE1]也不例外,于是[OLE1]经过按COM标准的重写,形成了第二代的OLE,我们下面称之为[OLE2]。[OLE2]实现了[OLE1]的功能,但是它是按COM标准来写得。
  至此,起源介绍完了,整整好:
                   想在Word中嵌入Excel-->复合文档-->[OLE1]-->[OLE2]
咦!COM哪里去了?
  COM是一种标准,本身跟上面的应用不搭旮。因此学习COM与OLE没有必然联系。
 
  二,COM实现。
  既然COM是种标准,标准总是要实现的吧,用哪种语言无所谓VC,VB,DELPHI都可以,只是符合COM标准就OK了。[COM的实现(COM对象)]之间按COM标准进行通信。
 COM实现是二进制的,他有两个特性:1,语言无关性;2,位置无关性;
 
  三,COM对象--CLSID
  COM是以对象形成提供服务的。
  在介绍CLSID之前先来说一下GUID。
 
                          GUID档案
  昵称:GUID
  英文名:Global Unique Identifier
  中文名:全局唯一标识符
  生成方式:GUIDGEN.exe(Visual studio自带工具)
  内部构造:
       struct GUID{
            DWORD Data1;       //4个字节:4*8=32 位
            WORD  Data2;       //2个字节:2*8=16 位
            WORD  Data3;
            BYTE  Data4[8];    //8个字节:8*8=64 位
       };
  身高:128位 32+16*2+64
  擅长:起别人起名字,且不重复
 
既然COM是以对象提供服务的,我们怎么标识COM对象呢?既然GUID这么擅长给人起名字,我们就用GUID来标识一个COM对象。一个COM对象的GUID标识符我们称之为CLSID。
 
  四,接口--IID
  既然COM对象提供服务,他以什么方式提供服务呢?答案:以接口方式提供服务。以方法的方式实现服务的内容。
  我们怎么标识接口呢。让GUID给接口也起个名字。
  一个接口的GUID标识符我们称之为IID。
 
  五,COM对象--接口--方法 之间的关系
 
  一幅图:
 
  二句话:
  1,一个COM对象,可以有多个接口;一个COM接口可以有多个方法;
  2,应用程式找到COM接口,让它提供服务;COM接口提供方法给应用程式调用以实现服务;
 
 
 
 
 
 
 
 
 
 
 
 
Jerry_Chow
   6/26'07
阅读(1070) | 评论(1) | 转发(0) |
0

上一篇:由独立思考想起

下一篇:弟弟的短信

给主人留下些什么吧!~~