前言页 1
第1章 Microsoft对象技术概述 1
1.1 COM,DCOM,OLE和ActiveX 1
1.2 组件技术的演变 2
1.2.1 定制控制 2
1.2.2 Visual Basic扩展 2
1.2.3 OLE 1.0 3
1.2.4 OLE 2.0 3
1.3 理解OLE 4
1.3.1 从最终用户的角度观察OLE 4
1.3.2 从程序员的角度观察OLE 8
1.4 ActiveX概述 20
1.4.1 通过ActiveX扩展OLE技术 21
1.4.2 新的ActiveX技术 22
1.5 分布式组件对象模型(DCOM) 23
1.6 小结 24
第2章 对象的演变 25
2.1 对象和类 25
2.2 什么是面向对象 26
2.2.1 封装 26
2.2.2 继承 29
2.2.3 多态性 32
2.3 抽象的基类 34
2.4 类对象 34
2.5 从C++的观点看对象 35
2.5.1 C++中的封装 36
2.5.2 C++中的继承 37
2.5.3 C++中的方法重载 38
2.5.4 C++中的多态性 39
2.5.5 C++中的抽象基类 41
2.5.6 C++中的类对象 42
2.6 从COM的观点看对象 45
2.6.1 COM中的封装 45
2.7 COM中的继承 47
2.7.1 COM中的方法重载 49
2.7.2 COM中的多态性 49
2.7.3 COM中的类对象 50
2.8 小结 51
第3章 创建COM对象和接口 52
3.1 了解低级COM 52
3.2 客户与服务器 53
3.2.1 进程内服务器 55
3.2.2 本地服务器 55
3.2.3 远程服务器 56
3.2.4 代理 56
3.2.5 服务器的工作实现 58
3.3 用GUID标识类 60
3.3.1 生成GUID 61
3.3.2 将GUID放入源码 63
3.4 HRESULT返回类型 65
3.5 接口的构造 67
3.6 探索IUnknown 70
3.6.1 利用QueryInterface()来获取不同的接口 71
3.6.2 引用计数:AddRef()和Release() 72
3.6.3 认识IUnknown 74
3.7 小结 76
第4章 实现COM客户和服务器 77
4.1 最简单的示例程序:Fortune1 77
4.2 Fortune2示例程序 79
4.3 创建IFortuneTeller接口 79
4.3.1 IFortuneTeller接口 80
4.3.4 STDMETHOD宏 81
4.3.3 interface关键字 81
4.3.2 DECLARE_INTERFACE宏 81
4.3.5 PURE宏 82
4.4 宽字节字符集和国际化的字符串 82
4.4.1 在宽字节字符集与ANSI之间转换字符串 83
4.4.2 BSTR,COM字符串类型 84
4.5 重新创建CFortuneTeller为ComFortuneTeller 85
4.5.1 ComFortuneTeller类 85
4.5.2 VerboseMsg()函数 88
4.5.3 IUnKnown接口的ComFortuneTeller实现 90
4.5.4 全局数据 91
4.5.5 IFortuneTeller接口的ComFortuneTeller类实现 93
4.6 ComFortuneTellerFactory类 93
4.6.1 IClassFactory接口 93
4.6.2 实现ComFortuneTellerFactory 95
4.7 完成进程内服务器 100
4.7.2 DllCanUnloadNow()函数 101
4.7.1 DllGetClassObject()函数 101
4.8 创建客户 102
4.8.1 初始化 104
4.8.2 取回一个指向FortuneTeller对象的接口指针 105
4.8.3 使用 108
4.8.4 终止 108
4.9 注册服务器 109
4.9.1 注册表基础知识 109
4.9.2 COM类和注册表 110
4.10 小结 111
第5章 使用MFC进行COM编程 112
5.1 MFC简介 112
5.2 MFC和OLE/ActiveX 113
5.3 ActiveX模板库 113
5.6 多重接口和多重继承 114
5.4 多重组件和它们的多重接口 114
5.5 多重接口支持不是聚合 114
5.6.1 符号冲突的问题 115
5.7 使用嵌套类输出多重接口 116
5.7.1 Fortune3示例程序 117
5.7.2 ComFortuneTeller的MFC版本 117
5.7.3 CCmdTarget类中的IUnknown实现 118
5.7.4 声明嵌套类 120
5.7.5 INTERFACE MAP,OLECREATE和DYNCREATE宏 121
5.7.6 实现MFC ComFortuneTeller类 122
5.7.7 使用IMPLEMENT_DYNCREATE和IMPLEMENT_OLECREATE实现MFC类工厂 126
5.7.8 声明和实现接口映射 127
5.7.9 在MFC服务器中对对象实例进行计数 128
5.7.10 为嵌套类实现IUnknown接口 129
5.7.12 实现IFortuneTeller和IQuotation接口 131
5.7.11 IMPLEMENT_NESTED_IUNKNOWN宏 131
5.7.13 完成基于MFC的Fortune3服务器 132
5.7.14 Fortune3客户程序 138
5.8 小结 141
第6章 使用聚合模拟继承 142
6.1 聚合的功能 142
6.1.1 聚合的机制 143
6.2 聚合和MFC风格 144
6.3 创建机器人组件 146
6.3.1 IRobot接口 146
6.3.2 ISimpleDrawable接口 146
6.3.3 ComRobot COM类 147
6.3.4 客户和服务器 153
6.3.5 客户程序主窗口 154
6.4 使用聚合的NoisyRobot组件 157
6.5 小结 166
7.1 为什么建立本地服务器 167
第7章 使用本地服务器打破进程边界 167
7.1.1 编排中间层 168
7.1.2 代理与占位模块 168
7.2 接口定义语言 170
7.3 编制定制组件的IDL文件 171
7.3.1 Import 174
7.3.2 Typedef 174
7.3.3 Interface 175
7.3.4 方法原型 176
7.3.5 Coclass 178
7.4 将MIDL集成到Developer Studio中 178
7.5 COM实例:比萨饼订购向导 179
7.5.1 ComPizzaOrderTaker类 180
7.5.2 PizzaOrderTaker本地服务器 190
7.5.3 代理/占位模块DLL 198
7.5.4 向导客户 203
7.6 小结 224
第8章 使用ActiveX模板库创建COM对象 225
8.1 ATL简介 225
8.1.1 ATL与C++模板 226
8.1.2 多重继承 226
8.1.3 自动化和双重接口 226
8.1.4 Tear-off接口 227
8.2 ATL的体系结构 227
8.2.1 CComModule 227
8.2.2 CComObjectRoot 228
8.2.3 CComObject 228
8.2.4 CComCoClass 229
8.2.5 在定制接口中混合 230
8.3 比萨饼订购实例的ATL版本 231
8.3.1 用ATL声明ComPizzaOrderTaker类 231
8.3.2 实现ATL ComPizzaOrderTaker类 235
8.3.3 建立本地服务器 240
8.3.4 建立进程内服务器 250
8.5 注册表脚本程序和注册表管理程序 252
8.5.1 测试注册表脚本程序 253
8.5.2 编写注册表脚本程序 253
8.5.3 调用注册表管理程序 257
8.5.4 宏替换 259
8.6 增加新的向导配置入口 260
8.7 小结 260
第9章 分布式对象概述 262
9.1 分布式系统的发展 262
9.1.1 传统系统 263
9.1.2 客户/服务器 263
9.2 分布式COM 267
9.2.1 对象RPCs 268
9.2.2 OXID 269
9.2.3 传递接口指针 270
9.2.4 优化DCOM 270
9.2.5 Pinging 271
9.3 小结 272
第10章 安全性 273
10.1 安全支持提供者接口 273
10.2 NT安全性概述 273
10.2.1 安全性描述符 273
10.2.2 安全ID 274
10.2.3 访问控制列表 277
10.2.4 用户配置文件 280
10.2.5 访问标记 280
10.3 COM安全性 281
10.3.1 认证安全性 281
10.3.2 模仿安全性 282
10.3.3 激活安全性 283
10.3.4 调用安全性 288
10.3.5 示例 289
10.3.6 示例1 295
10.3.7 示例2 296
10.4 COM对象身份鉴别 296
10.5 进程内安全性 298
10.6 安全性覆盖和模仿 298
10.6.1 IClientSecurity 298
10.6.2 IServerSecurity 299
10.7 DCOM与CAPI 300
10.8 小结 300
第11章 使用不同的COM线程模型 301
11.1 线程函数 303
11.1.1 CreateThread() 303
11.1.2 SuspendThread()和ResumeThread() 304
11.1.3 TerminateThread() 305
11.1.4 GetExitCodeThread() 306
11.1.5 ExitThread() 306
11.1.6 beginthreadex() 307
11.1.7 线程局部存储区 309
11.2 线程类型 311
11.2.1 工作线程 311
11.2.2 消息队列线程 313
11.2.3 线程池 317
11.2.4 窗口线程 319
11.2.5 单元线程 321
11.2.6 纤程 323
11.3 线程同步 323
11.3.1 事件 324
11.3.2 互斥变量 325
11.3.3 临界区 326
11.3.4 信号量 328
11.4 COM线程模型 330
11.4.1 单线程模型 330
11.4.2 单元线程模型 332
11.4.3 自由线程模型 336
11.5 小结 336
第12章 揭开自动化的面纱 337
12.1 自动化的特征 339
12.1.1 自动化数据类型 346
12.2 自动化和事件支持 352
12.3 在MFC中支持自动化 352
12.4 在ATL中支持自动化 354
12.4.1 客户(控制器) 354
12.4.2 CComDispatchDriver 354
12.4.3 服务器 354
12.6 小结 356
12.5 特殊意义的DispID 356
第13章 使用分布式对象 357
13.1 远程对象实例化 357
13.1.1 远程存在的COM组件 358
13.1.2 CoCreateInstanceEx 362
13.1.3 决定什么时候使用进程内服务器、本地服务器或远程服务器 365
13.2 设计分布式对象应用 366
13.2.1 可扩缩性 367
13.2.2 负载平衡 368
13.2.3 连接到服务对象 369
13.2.4 事件通知和可连接对象 371
13.3 分布式比萨饼订购系统 372
13.3.1 新的PizzaOrderTaker服务器 373
13.3.2 定位器类 384
13.3.3 PizzaMaker服务器 388
13.3.4 PizzaMaker服务器查看器 401
13.4 小结 416