编辑推荐
全书分为三部分,第一部分为COM基础,第二部分为COM扩展,第三部分为COM应用与发展,介绍了组件化程序设计思想以及多层软件结构模型。读者在学习了COM的基本原理之后,结合MTS和COM+所倡导的一些概念,就可以从更高的层次来理解和使用COM及COM+了。
内容简介
书籍 计算机书籍
本书不仅介绍了COM的基本原理及其扩展知识,还讲述了MTS及COM+的一些知识。全书分为三部分,第一部分为COM基础,第二部分为COM扩展,第三部分为COM应用与发展,介绍了组件化程序设计思想以及多层软件结构模型。读者在学习了COM的基本原理之后,结合MTS和COM+所倡导的一些概念,就可以从更高的层次来理解和使用COM及COM+了。
作译者
潘爱民,浙江海宁人,获得了南开大学数学学士学位,清华大学工学硕士学位,以及北京大学计算机科学博士学位。他从中学时代开始接触计算机编程,经历了从DOS到Windows各种版本的发展历程。潘爱民曾经长期从事软件技术的研究和开发工作,撰写了大量软件技术文章,1999年曾经是《微电脑世界》杂志社的合作专家。他著写了《COM原理与应用》(1999年出版),翻译了多部经典名作,如《Visual C++技术内幕》(第四、六版)、《C++ Primer中文版》(第三版)、《COM本质论》、《计算机网络》(第四版)等。从2001年开始,潘爱民在北京大学计算机科学技术系承担研究生课程教学,共讲授了三门课程:《组件技术》、《网络与信息安全》和《程序开发环境分析与实践》,深受学生欢迎。2006年秋季在清华大学软件科学实验班讲授《程序设计与算法基础》课程。 潘爱民获得了2001年微软亚洲研究院“微软学者”称号,2002年度北京大学优秀教学奖。他现在微软亚洲研究院从事系统与安全方向的研究工作。
目录
引言
第1部分 com原理
第1章 概述
1.1 com的起源
1.1.1 0le的发展历史
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 类厂(c1ass factory)
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 windows nt安全机制
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章 用visual c++开发com应用
5.1 win32 sdk和mfc介绍
5.1.1 win32 sdk
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 用visual c++开发com应用
5.3.1 利用appwizard创建com程序工程框架
5.3.2 利用c1asswizard添加com对象类
5.3.3 atl介绍
5.4 visual c++与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 io1eitemcontainer接口
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 0le拖—放传输协议
9.4.2 mfc对拖—放特性的支持
9.4.3 支持拖—放特性的例子程序
第10章 分布式com(dcom)
10.1 dc0m基本结构
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 创建c0m组件(一)
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 类型库和0dl
11.1.4 idispatch接口
11.1.5 自动化兼容的数据类型
11.1.6 参数顺序、可选参数和命名参数
11.1.7 idisptchex接口
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 co1edispatchdriver类
11.4.3 在visual basic中使用自动化对象
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和i01eclientsite接口
12.2.4 iolecontrol和iolecontrolsite接口
12.2.5 用于activex控制的标准分发圆
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 windows dna策略
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 本章小结
附录:部分术语英汉对照表
序言
从酝酿写这本关于COM的书到最后完成本书经历了一年半的时间,整个写作过程甚为艰难,多方面的原因使得本书的写作并不顺利。不过,最后总算完成了预期的目标,当然;是否实现了当初的愿望还得由读者来评判。
促使我写作这本书有多方面的原因。首先,我自己学习COM的时候并不轻松,因为我找不到合适的资料;后来我就去读COM规范,但是COM规范言简意赅,说得很不清楚,经常把我弄得稀里糊涂,后来通过一些实践经验,才明白了很多。其次,很多读者和朋友经常向我咨询如何学习COM,让我推荐一些资料或者参考书,我也就尽我所能,为他们作一些介绍,但很难为他们找到合适的参考书。还有一个更重要的原因是,我看到国内市场上几乎买不到系统介绍COM的中文书,连翻译的书都看不到。由此我就萌生了写作本书的念头。
在本书的写作过程中,我参阅了大量的技术资料,但在讲述COM各项技术时,却并没有直接引用这些资料中的内容,更不是简单的翻译。我希望能够根据我在学习COM过程中的一些体会制定出一个合理的学习顺序,引导读者走上学习COM的捷径;我也希望能够把我对COM的理解融入书中,使读者更快地领会COM的技术精华。全书按三部分来讲述COM:第一部分为COM基础,在写作这部分内容时,我参阅了“Inside COM”(《COM技术内幕》,已由清华大学出版社引进出版)一书,但重新调整了内容结构,并增加了一些关于Windows开发和Visual C++、MFC方面的知识;第二部分为COM扩展,在讲述这部分内容时,我参阅了“Inside 0LE”一书,但因为此书主要是针对0LE讲述一些技术专题,所以我删去了一些不必要的内容,并补充了一些最新的资料;第三部分为CoM应用与发展,这部分内容我主要参阅了Microsoft提供的技术资料,由于这些技术发展变化很快,所以我尽可能按照最新的版本讲述。
本书不仅介绍了COM的基本原理,也讲述了MTS以及COM+的一些知识,所以阅读本书可以了解到与COM相关的技术。本书的第三部分还介绍了组件化程序设计思想以及多层软件结构模型,这是目前计算机软件的一个发展方向。COM作为Windows平台上的组件对象模型,为组件化程序设计和多层软件结构提供了基础平台。因此,读者在学习了COM的基本原理之后,结合MTS和COM+所倡导的一些概念,就可以从更高的角度来理解COM和使用COM了。
Microsoft引用术语非常随意,这为本书的写作带来了很大的困难。COM技术涵盖面非常广,涉及到的术语又非常多,有大量的术语没有标准的中文说法,比如,“marshaling”、“moniker”、“apartment”等,对于这些术语,我都采用意译的方法,尽可能地把这些词在COM范畴中的真实含义表达出来,同时还能符合汉语的习惯。如果本书的这些术语表达欠妥,或者与其他书籍的译法有出入,还请读者见谅。
最后,我要感谢所有直接或间接为本书作出贡献的同事或朋友。首先,我要感谢我的妻子,没有她多年来对我的支持和理解,我很难写成这样一本技术专题书。其次,我要感谢北大计算机研究所和方正技术研究院的许多同事和朋友:吕肖庆和邹维给了我很多帮助,他们的鼓励曾经使我克服了许多困难;杨巍使我转到COM的研究上来,并一直支持我从事相关技术的研究;孙杰、吕思伟、顾磷、王婶、赵绍君等几位研究生为我营造了很好的学习和使用COM的气氛,与他们的多次讨论使我受益匪浅。
我也要向微软(中国)有限公司的张伟伟先生表示谢意,他为我提供了一些最新的技术资料以及技术信息。最后,我要向清华大学出版社的汤斌浩先生表示感谢,与他的愉快合作使本书得以顺利出版。
潘爱民
1999年6月于北大蔚秀园