引言 1
第1部分 COM原理 9
第1章 概述 9
1.1 COM的起源 9
1.1.1 OLE的发展历史 10
1.1.2 组件的产生 10
1.1.3 面向对象的组件模型——COM 11
1.2.1 对象与接口 12
1.2 COM结构 12
1.2.2 客户/服务器模型 13
1.2.3 COM库 14
1.3 COM特性 15
1.3.1 语言无关性 15
1.3.2 进程透明特性 16
1.3.3 可重用性 17
1.4 COM的发展前景 17
1.4.1 COM与Windows操作系统 17
1.4.2 COM与数据库 18
1.4.3 COM与Intranet应用 19
1.4.4 COM与Internet 19
第2章 COM对象和接口 21
2.1 COM对象 21
2.1.1 COM对象的标识——CLSID 22
2.1.2 COM对象与C++对象的比较 23
2.2 COM接口 25
2.2.1 从API到COM接口 25
2.2.2 接口定义和标识 26
2.2.3 用C++语言定义接口 28
2.2.4 接口描述语言IDL 29
2.2.5 接口的内存模型 30
2.2.6 接口的一些特点 32
2.3 IUnknown接口 33
2.3.1 引用计数 34
2.3.2 实现引用计数 35
2.3.3 使用引用计数规则 39
2.3.4 接口查询 41
2.3.5 COM对象的接口原则 42
2.3.6 QueryInterface成员函数的实现 43
2.3.7 COM对象和接口图示法 45
2.4 字典组件例子程序 45
2.4.1 组件程序DictComp 46
2.4.2 客户程序DictCtrl 51
第3章 COM的实现 55
3.1 进程内组件和进程外组件 55
3.1.1 进程内组件 56
3.1.2 进程外组件 58
3.2.1 注册表结构 60
3.2 通过注册表管理COM对象 60
3.2.2 COM组件注册信息 61
3.2.3 COM组件的注册操作 63
3.3 类厂(class factory) 65
3.3.1 类厂和DllGetObjectClass函数 65
3.3.2 COM库与类厂的交互 66
3.3.3 类厂的实现 69
3.3.4 类厂对组件生存期的控制 73
3.4.1 COM库的初始化 74
3.4 COM库 74
3.4.2 COM库的内存管理 75
3.4.3 组件程序的装载和卸载 77
3.4.4 常用函数和HRESULT 79
3.5 COM实现过程 83
3.5.1 进程内组件与客户的协作过程 83
3.5.2 进程外组件与客户的协作过程 85
3.6.1 字典组件类厂的实现 87
3.6.2 字典对象的实现 87
3.6 字典组件例子程序的实现 87
3.6.3 全局引出函数的实现 88
3.6.4 客户程序DictCtrl 89
第4章 COM特性 92
4.1 可重用性:包容和聚合 92
4.1.1 包容和聚合 93
4.1.2 包容实现 95
4.1.3 聚合实现 99
4.1.4 聚合例子程序 108
4.2 进程透明性 110
4.2.1 列集(marshaling) 111
4.2.2 自定义列集 112
4.2.3 标准列集 116
4.2.4 标准列集的实现 121
4.2.5 进程外组件例子程序 125
4.3 安全性 126
4.3.1 Windows NT安全机制 127
4.3.2 激活安全性 128
4.3.3 调用安全性 131
4.4 多线程特性 132
4.4.1 Win32线程和COM线程 132
4.4.2 列集和同步 134
4.4.3 套间线程 135
4.4.4 自由线程 136
4.4.5 进程内组件的线程模型 137
第5章 用Visual C++开发COM应用 139
5.1 Win32 SDK和MFC介绍 139
5.1.1 Win32 SDK 140
5.1.2 MFC基础:应用类和窗口类 144
5.1.3 MFC应用结构 146
5.1.4 MFC库结构 148
5.2 MFC对COM应用的支持 149
5.2.1 用嵌套类实现COM接口 150
5.2.2 接口映射表 153
5.2.3 CCmdTarget类实现IUnknown 157
5.2.4 COM引出函数和类厂实现 159
5.3 用Visual C++开发COM应用 161
5.2.5 MFC对COM支持小结 161
5.3.1 利用AppWizard创建COM程序工程框架 162
5.3.2 利用ClassWizard添加COM对象类 164
5.3.3 ATL介绍 166
5.4 Visual C++与ActiveX应用 170
5.4.1 MFC对自动化的支持 170
5.4.2 MFC对 ActiveX控制的支持 171
5.4.3 MFC对复合文档的支持 172
第6章 可连接对象 175
第2部分 COM扩展 175
6.1 可连接对象结构模型 176
6.1.1 客户与可连接对象的关系 176
6.1.2 可连接对象的基本结构 177
6.1.3 客户方基本结构 178
6.2 实现可连接对象(源对象) 178
6.2.1 枚举器 179
6.2.3 连接点和IConnectionPoint接口 180
6.2.2 源对象和IConnectionPointContainer接口 180
6.2.4 建立连接过程 182
6.3 客户-源对象-接收器的协作过程 182
6.3.1 接收器的实现 183
6.3.2 事件的激发和处理 184
6.3.3 与出接口有关的类型信息 185
6.4 可连接对象的程序实现 186
6.4.1 用IDispatch接口作为出接口 187
6.4.2 MFC对连接和事件的支持 189
6.4.3 用MFC实现源对象 192
6.4.4 用MFC在客户程序中实现接收器 195
第7章 结构化存储 202
7.1 结构化存储基础 202
7.1.1 从文件系统进展到结构化存储 203
7.1.2 存储对象和流对象 205
7.1.3 用结构化存储设计应用 210
7.2 结构化存储特性 212
7.2.1 访问模式 212
7.2.2 事务机制 214
7.2.4 增量访问 216
7.2.3 命名规则 216
7.3 结构化存储实现:复合文档 217
7.3.1 LockBytes对象和ILockBytes接口 218
7.3.2 复合文档API函数介绍 219
7.3.3 零内存保存特性和IRootStorage接口 222
7.3.4 存储对象、流对象和文件的CLSID信息 222
7.3.5 复合文档与结构化存储 224
7.4 永久对象实现 224
7.4.1 永久接口 225
7.4.2 永久对象的存储特性 226
7.4.3 永久对象例子程序 228
7.4.4 复合文档例子程序 232
7.5 本章小结 238
第8章 命名和绑定技术 239
8.1 名字技术基础 239
8.1.1 COM名字对象 240
8.1.2 使用名字对象:绑定过程 240
8.2 IMoniker接口 242
8.2.1 名字管理 243
8.2.2 利用IMoniker实现绑定 244
8.2.3 管理复合名字对象 245
8.2.4 名字解析 246
8.3 复合名字对象 248
8.3.1 复合名字对象结构 248
8.3.2 ROT和绑定环境对象 249
8.3.3 复合名字对象绑定过程的剖析 253
8.3.4 IOleItemContainer接口 255
8.4.1 COM提供的系统名字对象 257
8.4 COM名字对象分类 257
8.4.2 URL名字对象 263
8.4.3 自定义名字对象 266
8.5 COM名字对象的应用 267
8.5.1 服务程序中名字对象的应用 268
8.5.2 客户程序中名字对象的应用 269
第9章 统一数据传输 272
9.1 统一数据传输基础 272
9.1.1 数据交换与传输协议的分离 272
9.1.2 应用:剪贴板和拖-放 274
9.2 数据传输机制 275
9.2.1 数据结构FORMATETC和STGMEDIUM 275
9.2.2 数据对象和IDataObject接口 279
9.2.3 通报连接机制 282
9.2.4 有关数据对象的小结 285
9.3 通过剪贴板传输数据 287
9.3.1 剪贴板协议机理和用法 287
9.3.2 MFC对剪贴板的支持 290
9.3.3 支持剪贴板操作的例子程序 293
9.4 拖-放数据传输协议 295
9.4.1 OLE拖-放传输协议 296
9.4.2 MFC对拖-放特性的支持 299
9.4.3 支持拖-放特性的例子程序 300
第10章 分布式COM(DCOM) 302
10.1 DCOM基本结构 302
10.1.1 从COM转向DCOM 303
10.1.2 DCOM对象的定位 304
10.1.3 列集(marshaling) 305
10.1.5 DCOM特性 306
10.1.4 对象RPC 306
10.2 对象激活 308
10.2.1 创建DCOM组件(一) 308
10.2.2 创建DCOM组件(二) 310
10.2.3 远程创建进程内组件:代理进程(surrogate) 313
10.2.4 如何连接到指定的远程对象实例 314
10.3 连接管理 316
10.3.1 更好地控制远程对象的生存期 316
10.3.3 连接点管理 317
10.3.2 pinging机制 317
10.3.4 连接传递 318
10.4 并发管理 318
10.4.1 线程模型 319
10.4.2 消息过滤器 321
10.5 DCOM安全模型 325
10.5.1 安全性策略 325
10.5.2 安全性配置 327
10.6 本章小结 330
11.1 自动化对象基础 333
第3部分 COM应用与发展 333
第11章 自动化(Automation)对象 333
11.1.1 自动化产生与发展 334
11.1.2 属性和方法 334
11.1.3 类型库和ODL 335
11.1.4 IDispatch接口 337
11.1.5 自动化兼容的数据类型 339
11.1.6 参数顺序、可选参数和命名参数 342
11.1.7 IDispatchEx接口 344
11.2 自动化对象实现 345
11.2.1 类型库支持 346
11.2.2 Invoke函数实现 350
11.2.3 异常处理 353
11.2.4 多语种——本地化 355
11.2.5 用CreateStdDispatch函数实现自动化对象 355
11.3 自动化对象应用 357
11.3.1 双接口 357
11.3.2 迟绑定和早绑定 359
11.3.3 自动化集合对象 360
11.3.4 以IDispatch作为出接口 361
11.3.5 自动化控制器 362
11.4 自动化对象编程 364
11.4.1 MFC对自动化对象的支持 364
11.4.2 COleDispatchDriver类 367
11.4.3 在Visual Basic中使用自动化对象 368
11.5 例子程序 370
11.5.1 例子程序1——具有计算器功能的自动化对象 370
11.5.2 例子程序2——自动化客户程序 371
11.5.3 例子程序3——在Excel中使用计算器对象 373
第12章 ActiveX控制 376
12.1 ActiveX控制基础 377
12.1.1 实地激活 377
12.1.2 属性页 380
12.1.3 属性变化通知 384
12.2 ActiveX控制结构 385
12.2.1 ActiveX控制基本结构 385
12.2.2 包容器基本结构 387
12.2.3 IOleObject和IOleClientSite接口 389
12.2.4 IOleControl和IOleControlSite接口 391
12.2.5 用于ActiveX控制的标准分发ID 394
12.2.6 ActiveX控制的其他一些特点 397
12.3 ActiveX控制与Internet 399
12.3.1 从桌面环境转向Internet 399
12.3.2 包装ActiveX控制 402
12.3.3 许可证管理 405
12.3.4 Web页面中ActiveX控制的初始化 407
12.3.5 脚本支持与初始化安全性 408
12.4 ActiveX控制开发和应用 409
12.4.1 用MFC实现ActiveX控制——Smile例子程序 410
12.4.2 用MFC实现ActiveX控制包容器——Smiley例子程序 412
第13章 基于COM的程序设计 415
13.1 组件化程序设计 415
13.1.1 面向对象程序设计方法 415
13.1.2 组件的概念和特点 417
13.1.3 基于COM的组件化程序设计方法 418
13.2.1 MTS基本结构 420
13.2 MTS介绍 420
13.2.2 MTS程序设计概念 422
13.2.3 MTS管理程序 424
13.2.4 MTS特性 426
13.3 多层软件结构 427
13.3.1 应用结构的发展 427
13.3.2 多层应用软件结构 429
13.3.3 多层结构的优点 432
13.4.1 Web应用基本结构 433
13.4 用COM设计Web应用 433
13.4.2 ASP与COM组件 434
13.5 本章小结 437
第14章 COM发展——COM+ 439
14.1 COM+基本介绍 439
14.1.1 Windows DNA策略 440
14.1.2 COM+基本结构 441
14.1.3 对象环境 443
14.2 COM+系统服务介绍 444
14.2.1 COM+队列组件 445
14.2.2 COM+事件模型 446
14.2.3 负载平衡 447
14.2.4 内存数据库(IMDB) 448
14.2.5 对其他服务的增强 449
14.3 COM+应用开发 451
14.3.1 应用开发支持 451
14.3.2 基于属性的C++编程语言 452
14.4 本章小结 453
附录:部分术语英汉对照表 455