书籍详情

COM原理与应用

COM原理与应用

作者:潘爱民著

出版社:清华大学出版社

出版时间:1999-11-01

ISBN:9787302022688

定价:¥39.00

购买这本书可以去
内容简介
  本书不仅介绍了C0M的基本原理及其扩展知识,还讲述了MTS及COM+的一些知识。全书分为三部分,第一部分为C0M基础,第二部分为C0M扩展,第三部分为COM应用与发展,介绍了组件化程序设计思想以及多层软件结构模型。读者在学习了COM的基本原理之后,结合MTS和C0M+所倡导的一些概念,就可以从更高的层次来理解和使用C0M及C0M+了。片断:nbsp;C0M,即组件对象模型,是一种以组件为发布单元的对象模型,这种模型使各软件组件可以用一种统一的方式进行交互。C0M既提供了组件之间进行交互的规范,也提供了实现交互的环境,因为组件对象之间交互的规范不依赖于任何特定的语言,所以COM也可以是不同语言协作开发的一种标准。即使读者对COM还不太了解,我想读者对OLE(objectlinkingandembed出ng,对象链接和嵌入)应该不会陌生。OLE技术以COM规范为基础,OLE充分发挥了COM标准的优势,使Windows操作系统上的应用程序具有极强的可交互性。如果没有OLE的支持,Win-dows操作系统则会逊色很多。但是,C0M规范并不局限于OLE技术,实际上,OLE技术只是COM的一个应用而已,这几年,网络技术飞速发展,OLE技术在进行网络互连时显示出了很大的局限性,而C0M则表现出了极强的适应能力,因此,这两年伴随着网络的发展,COM也得到了展示的机会。继OLE之后,Microsoft又推出了一系列以COM为基础的技术,并统称为ActiveX技术,这也充分说明了COM的应用价值。本章将对COM作概括性的论述,使读者对COM有一个基本的认识。1.1COM的起源作为组件化软件模型,COM的发展过程非常有趣。Microsoft最初并没有刻意发展一种组件化系统,但是,随着桌面窗口系统中应用程序之间的交互不断深入,就在0LE技术的发展过程中产生了COM。而且后来进一步的发展表明,COM所定义的组件标准其广泛性远远超过了OLE所具有的能力,因此,从这个意义上讲,在组件化软件发展进程中,Microsoft走了一条捷径。从一开始,C0M就具有很好的应用前景。可是,在这几年软件发展过程中,虽然COM能很好地胜任组件化软件的模型标准,但实际进展并不顺利。我想,原因可能在于0LE技术太复杂,OLE程序太复杂,一般人难以窥探到OLE的底层,尤其是通过OLE来学习C0M,那更是本末倒置了,所以我们也可以说OLE掩盖了COM技术,甚至OLE的一些缺点掩盖了C0M的优点。不过这种情况已经有了很大的好转,人们逐渐意识到C0M符合了当前软件业的发展需要,用COM进行软件架构是一种理想的应用方案。而且,脱离开0LE之后,COM自身又得到了很大的发展,现在已经遍布于Microsoft的各种软件产品中。1.1.1OLE的发展历史从字面上来看,OLE所表达的是复合文档(compounddocument)的概念,而且,OLE的第一个版本即OLE1也仅限于此。需要指出的是,在OLE1中,组件程序和客户程序之间进行通信并没有使用COM规范,而是使用了一种被称为动态数据交换(DDE,DynamicDataExchange)的机制,DDE建立在Windows操作系统的消息机制基础上,其最大的缺点是效率低,而且稳定性不好,使用也不够方便。DDE的这些缺陷也限制了OLE1的发展,于是,在第二个OLE版本即OLE2中,Microsoft重新编写了底层代码,放弃了DDE,采用了新的COM模型,因此,OLE2成了第一个用COM架构的软件系统。由于采用了COM,OLE2比OLE1效率更高,稳定性和灵活性有了很大提高。在以后OLE的发展过程中,由于采用了COM作为其底层结构,使用COM接口(inter-face)作为程序之间通信的标准,因此,OLE模块定制和扩充变得非常方便。这里我顺便提一下软件版本的升级方式。一般的应用系统在升级版本时,往往用新的软件模块全部替换老的程序模块,因此,升级就意味着全部更新,例如OLE2对0LE1进行升级,不仅软件模块作了替换,连基本技术也变了。但是在OLE2之后,由于采用了组件化的软件模型,因此,每一个底层模块可以单独升级,而且在原来软件模块的基础上,可以添加新的组件模块而不需要改变原有的组件模块。因此,在0LE2之后,0LE技术不再局限于“对象链接和嵌入”,不再局限于复合文档,而变成了在桌面系统上进行程序通信的一个技术统称。因此,当人们正在等待“OLE3”出现的时候,OLE已经不再是最初的OLE了。并且,用户计算机中的0LE系统也正悄悄地在进行更新。1.1.2组件的产生在计算机软件发展的早期,一个应用系统往往是一个单独的应用程序。应用越复杂,程序就越庞大,系统开发的难度也就越大。而且,一旦系统的某个版本完成以后,在下个版本出来之前,应用程序不会再有所改变。而对于庞大的程序来讲,更新版本的周期很长,在两个版本之间,如果由于操作系统发生了变化,或者硬件平台有了变化,则应用系统就很难适应这样的变化。所以这类单体应用程序已经不能满足计算机软硬件的发展需要。从软件模型角度来考虑,一个很自然的想法就是把一个庞大的应用程序分成多个模块,每一个模块保持一定的功能独立性,在协同工作时,通过相互之间的接口完成实际的任务。我们把每一个这样的模块称为组件,一个设计良好的应用系统往往被切分成一些组件,这些组件可以单独开发,单独编译,甚至单独调试和测试。当所有的组件开发完成后,把它们组合在一起就得到了完整的应用系统。当系统的外界软硬件环境发生变化或者用户的需求有所更改时,并不需要对所有的组件进行修改,而只需对受影响的组件进行修改,然后重新组合得到新的升级软件。图1.1体现了这样的一个升级过程。
作者简介
  潘爱民,浙江海宁人,获得了南开大学数学学士学位,清华大学工学硕士学位,以及北京大学计算机科学博士学位。他从中学时代开始接触计算机编程,经历了从DOS到Windows各种版本的发展历程。潘爱民曾经长期从事软件技术的研究和开发工作,撰写了大量软件技术文章,1999年曾经是《微电脑世界》杂志社的合作专家。他著写了《COM原理与应用》(1999年出版),翻译了多部经典名作,如《Visual C++技术内幕》(第四、六版)、《C++ Primer中文版》(第三版)、《COM本质论》、《计算机网络》(第四版)等。从2001年开始,潘爱民在北京大学计算机科学技术系承担研究生课程教学,共讲授了三门课程:《组件技术》、《网络与信息安全》和《程序开发环境分析与实践》,深受学生欢迎。2006年秋季在清华大学软件科学实验班讲授《程序设计与算法基础》课程。 潘爱民获得了2001年微软亚洲研究院“微软学者”称号,2002年度北京大学优秀教学奖。他现在微软亚洲研究院从事系统与安全方向的研究工作。
目录
     目录
   引言
    第1部分 COM原理
   第1章 概述
    1.1 COM的起源
    1.1.1 OLE的发展历史
    1.1.2 组件的产生
    1.1.3 面向对象的组件模型——COM
    1.2 COM结构
    1.2.1 对象与接口
    1.2.2 客户/服务器模型
    1.2.3 COM库
    1.3 COM特性
    1.3.1 语言无关性
    1.3.2 进程透明特性
    1.3.3 可重用性
    1.4 COM的发展前景
    1.4.1 COM与Windows操作系统
    1.4.2 COM与数据库
    1.4.3 COM与Intranet应用
    1.4.4 COM与Internet
   第2章 COM对象和接口
    2.1 COM对象
    2.1.1 COM对象的标识——CLSID
    2.1.2 COM对象与C++对象的比较
    2.2 COM接口
    2.2.1 从API到COM接口
    2.2.2 接口定义和标识
    2.2.3 用C++语言定义接口
    2.2.4 接口描述语言IDL
    2.2.5 接口的内存模型
    2.2.6 接口的一些特点
    2.3 IUnknown接口
    2.3.1 引用计数
    2.3.2 实现引用计数
    2.3.3 使用引用计数规则
    2.3.4 接口查询
    2.3.5 COM对象的接口原则
    2.3.6 QueryInterface成员函数的实现
    2.3.7 COM对象和接口图示法
    2.4 字典组件例子程序
    2.4.1 组件程序DictComp
    2.4.2 客户程序DictCtrl
   第3章 COM的实现
    3.1 进程内组件和进程外组件
    3.1.1 进程内组件
    3.1.2 进程外组件
    3.2 通过注册表管理COM对象
    3.2.1 注册表结构
    3.2.2 COM组件注册信息
    3.2.3 COM组件的注册操作
    3.3 类厂(classfactory)
    3.3.1 类厂和DllGetObjectClass函数
    3.3.2 COM库与类厂的交互
    3.3.3 类厂的实现
    3.3.4 类厂对组件生存期的控制
    3.4 COM库
    3.4.1 COM库的初始化
    3.4.2 COM库的内存管理
    3.4.3 组件程序的装载和卸载
    3.4.4 常用函数和HRESULT
    3.5 COM实现过程
    3.5.1 进程内组件与客户的协作过程
    3.5.2 进程外组件与客户的协作过程
    3.6 字典组件例子程序的实现
    3.6.1 字典组件类厂的实现
    3.6.2 字典对象的实现
    3.6.3 全局引出函数的实现
    3.6.4 客户程序DictCtrl
   第4章 COM特性
    4.1 可重用性:包容和聚合
    4.1.1 包容和聚合
    4.1.2 包容实现
    4.1.3 聚合实现
    4.1.4 聚合例子程序
    4.2 进程透明性
    4.2.1 列集(marshaling)
    4.2.2 自定义列集
    4.2.3 标准列集
    4.2.4 标准列集的实现
    4.2.5 进程外组件例子程序
    4.3 安全性
    4.3.1 WindowsNT安全机制
    4.3.2 激活安全性
    4.3.3 调用安全性
    4.4 多线程特性
    4.4.1 Win32线程和COM线程
    4.4.2 列集和同步
    4.4.3 套间线程
    4.4.4 自由线程
    4.4.5 进程内组件的线程模型
   第5章 用VisualC++开发COM应用
    5.1 Win32SDK和MFC介绍
    5.1.1 Win32SDK
    5.1.2 MFC基础:应用类和窗口类
    5.1.3 MFC应用结构
    5.1.4 MFC库结构
    5.2 MFC对COM应用的支持
    5.2.1 用嵌套类实现COM接口
    5.2.2 接口映射表
    5.2.3 CCmdTarget类实现IUnknown
    5.2.4 COM引出函数和类厂实现
    5.2.5 MFC对COM支持小结
    5.3 用VisualC++开发COM应用
    5.3.1 利用AppWizard创建COM程序工程框架
    5.3.2 利用ClassWizard添加COM对象类
    5.3.3 ATL介绍
    5.4 VisualC++与ActiveX应用
    5.4.1 MFC对自动化的支持
    5.4.2 MFC对ActiveX控制的支持
    5.4.3 MFC对复合文档的支持
    第2部分 COM扩展
   第6章 可连接对象
    6.1 可连接对象结构模型
    6.1.1 客户与可连接对象的关系
    6.1.2 可连接对象的基本结构
    6.1.3 客户方基本结构
    6.2 实现可连接对象(源对象)
    6.2.1 枚举器
    6.2.2 源对象和IConnectionPointContainer接口
    6.2.3 连接点和IConnectionPoint接口
    6.2.4 建立连接过程
    6.3 客户-源对象-接收器的协作过程
    6.3.1 接收器的实现
    6.3.2 事件的激发和处理
    6.3.3 与出接口有关的类型信息
    6.4 可连接对象的程序实现
    6.4.1 用IDispatch接口作为出接口
    6.4.2 MFC对连接和事件的支持
    6.4.3 用MFC实现源对象
    6.4.4 用MFC在客户程序中实现接收器
   第7章 结构化存储
    7.1 结构化存储基础
    7.1.1 从文件系统进展到结构化存储
    7.1.2 存储对象和流对象
    7.1.3 用结构化存储设计应用
    7.2 结构化存储特性
    7.2.1 访问模式
    7.2.2 事务机制
    7.2.3 命名规则
    7.2.4 增量访问
    7.3 结构化存储实现:复合文档
    7.3.1 LockBytes 对象和ILockBytes接口
    7.3.2 复合文档API函数介绍
    7.3.3 零内存保存特性和IRootStorage 接口
    7.3.4 存储对象、流对象和文件的CLSID信息
    7.3.5 复合文档与结构化存储
    7.4 永久对象实现
    7.4.1 永久接口
    7.4.2 永久对象的存储特性
    7.4.3 永久对象例子程序
    7.4.4 复合文档例子程序
    7.5 本章小结
   第8章 命名和绑定技术
    8.1 名字技术基础
    8.1.1 COM名字对象
    8.1.2 使用名字对象:绑定过程
    8.2 IMoniker接口
    8.2.1 名字管理
    8.2.2 利用IMoniker实现绑定
    8.2.3 管理复合名字对象
    8.2.4 名字解析
    8.3 复合名字对象
    8.3.1 复合名字对象结构
    8.3.2 ROT和绑定环境对象
    8.3.3 复合名字对象绑定过程的剖析
    8.3.4 IOleItemContainer接口
    8.4 COM名字对象分类
    8.4.1 COM提供的系统名字对象
    8.4.2 URL名字对象
    8.4.3 自定义名字对象
    8.5 COM名字对象的应用
    8.5.1 服务程序中名字对象的应用
    8.5.2 客户程序中名字对象的应用
   第9章 统一数据传输
    9.1 统一数据传输基础
    9.1.1 数据交换与传输协议的分离
    9.1.2 应用:剪贴板和拖-放
    9.2 数据传输机制
    9.2.1 数据结构FORMATETC和STGMEDIUM
    9.2.2 数据对象和IDataObject接口
    9.2.3 通报连接机制
    9.2.4 有关数据对象的小结
    9.3 通过剪贴板传输数据
    9.3.1 剪贴板协议机理和用法
    9.3.2 MFC对剪贴板的支持
    9.3.3 支持剪贴板操作的例子程序
    9.4 拖-放数据传输协议
    9.4.1 OLE拖-放传输协议
    9.4.2 MFC对拖-放特性的支持
    9.4.3 支持拖-放特性的例子程序
   第10章 分布式COM(DCOM)
    10.1 DCOM基本结构
    10.1.1 从COM转向DCOM
    10.1.2 DCOM对象的定位
    10.1.3 列集(marshaling)
    10.1.4 对象RPC
    10.1.5 DCOM特性
    10.2 对象激活
    10.2.1 创建DCOM组件(一)
    10.2.2 创建DCOM组件(二)
    10.2.3 远程创建进程内组件:代理进程(surrogate)
    10.2.4 如何连接到指定的远程对象实例
    10.3 连接管理
    10.3.1 更好地控制远程对象的生存期
    10.3.2 pinging机制
    10.3.3 连接点管理
    10.3.4 连接传递
    10.4 并发管理
    10.4.1 线程模型
    10.4.2 消息过滤器
    10.5 DCOM安全模型
    10.5.1 安全性策略
    10.5.2 安全性配置
    10.6 本章小结
    第3部分 COM应用与发展
   第11章 自动化(Automation)对象
    11.1 自动化对象基础
    11.1.1 自动化产生与发展
    11.1.2 属性和方法
    11.1.3 类型库和ODL
    11.1.4 IDispatch接口
    11.1.5 自动化兼容的数据类型
    11.1.6 参数顺序、可选参数和命名参数
    11.1.7 IDispatchEx 接口
    11.2 自动化对象实现
    11.2.1 类型库支持
    11.2.2 Invoke函数实现
    11.2.3 异常处理
    11.2.4 多语种——本地化
    11.2.5 用CreateStdDispatch函数实现自动化对象
    11.3 自动化对象应用
    11.3.1 双接口
    11.3.2 迟绑定和早绑定
    11.3.3 自动化集合对象
    11.3.4 以IDispatch作为出接口
    11.3.5 自动化控制器
    11.4 自动化对象编程
    11.4.1 MFC对自动化对象的支持
    11.4.2 COleDispatchDriver类
    11.4.3 在VisualBasic中使用自动化对象
    11.5 例子程序
    11.5.1 例子程序1——具有计算器功能的自动化对象
    11.5.2 例子程序2——自动化客户程序
    11.5.3 例子程序3——在Excel中使用计算器对象
   第12章 ActiveX控制
    12.1 ActiveX控制基础
    12.1.1 实地激活
    12.1.2 属性页
    12.1.3 属性变化通知
    12.2 ActiveX控制结构
    12.2.1 ActiveX控制基本结构
    12.2.2 包容器基本结构
    12.2.3 IOleObject和IOleClientSite接口
    12.2.4 IOleControl和IOleControISite接口
    12.2.5 用于ActiveX控制的标准分发ID
    12.2.6 ActiveX控制的其他一些特点
    12.3 ActiveX控制与Internet
    12.3.1 从桌面环境转向Internet
    12.3.2 包装ActiveX控制
    12.3.3 许可证管理
    12.3.4 Web页面中ActiveX控制的初始化
    12.3.5 脚本支持与初始化安全性
    12.4 ActiveX控制开发和应用
    12.4.1 用MFC实现ActiveX控制——Smile例子程序
    12.4.2 用MFC实现ActiveX控制包容器——Smiley例子程序
   第13章 基于COM的程序设计
    13.1 组件化程序设计
    13.1.1 面向对象程序设计方法
    13.1.2 组件的概念和特点
    13.1.3 基于COM的组件化程序设计方法
    13.2 MTS介绍
    13.2.1 MTS基本结构
    13.2.2 MTS程序设计概念
    13.2.3 MTS管理程序
    13.2.4 MTS特性
    13.3 多层软件结构
    13.3.1 应用结构的发展
    13.3.2 多层应用软件结构
    13.3.3 多层结构的优点
    13.4 用COM设计Web应用
    13.4.1 Web应用基本结构
    13.4.2 ASP与COM组件
    13.5 本章小结
   第14章 COM发展——COM+
    14.1 COM+基本介绍
    14.1.1 WindowsDNA策略
    14.1.2 COM+基本结构
    14.1.3 对象环境
    14.2 COM+系统服务介绍
    14.2.1 COM+队列组件
    14.2.2 COM+事件模型
    14.2.3 负载平衡
    14.2.4 内存数据库(IMDB)
    14.2.5 对其他服务的增强
    14.3 COM+应用开发
    14.3.1 应用开发支持
    14.3.2 基于属性的C++编程语言
    14.4 本章小结
   附录:部分术语英汉对照表
   
猜您喜欢

读书导航