第一部分 概 述
第1章 欢迎使用“com+开发人员
参考库” 1
1.1 “com+开发人员参考库”的组织方式 2
1.2 本书的组织方式 2
第2章 充分利用微软开发人员资源之三 3
2.1 介绍 3
2.2 动机 4
2.2.1 异步客户程序 4
2.2.2 其他应用 5
2.3 体系结构 7
2.3.1 async_uuid和具有非阻断方法调用
能力的代理/占位对象 7
2.3.2 客户端 8
2.3.3 服务器端 11
2.4 实现 13
2.4.1 简单的异步服务器 13
2.4.2 客户端程序的例子 14
2.4.3 服务器端 17
.2.5 限制和陷阱 20
2.5.1 限制 21
2.5.2 陷阱 21
2.6 结论 23
第3章 “com+开发人员参考库”
使用指南 24
3.1 本卷内容 24
3.2 其他各卷内容 28
3.3 获得更多信息 31
第4章 c和c++设计考虑 33
4.1 组件对象:c嵌套结构 33
4.2 组件对象:c++嵌套类 34
4.3 多重继承 36
第二部分 com编程基础
第5章 组件对象模型 37
5.1 com对象和接口 38
5.1.1 接口和接口的实现 38
5.1.2 接口指针和接口 39
5.1.3 iunknown和接口继承 40
5.2 使用和实现iunknown接口 40
5.2.1 queryinterface:在对象中查询 40
5.2.2 实现queryinterface的规则 41
5.2.3 通过引用计数控制对象的
生存期 42
5.3 对象的重用 45
5.3.1 封装/代理 46
5.3.2 聚合 46
5.4 com库 49
5.5 管理内存分配 50
5.5.1 ole内存分配器 50
5.5.2 内存管理规则 50
5.5.3 调试内存分配 51
第6章 进程、公寓和线程 52
6.1 选择线程模型 54
6.2 单线程公寓 54
6.3 多线程公寓 55
6.4 单/多线程通信 57
6.5 进程内服务器线程问题 57
6.6 跨公寓访问接口 59
6.6.1 创建全局接口表 59
6.6.2 什么时候使用全局接口表 60
第7章 com客户程序和服务器 61
7.1 通过类对象创建对象 62
7.1.1 com类对象和clsid 62
7.1.2 定位远程对象 63
7.1.3 实例创建辅助函数 64
7.2 com服务器的职责 64
7.2.1 实现iclassfactory 64
7.2.2 许可和iclassfactory2 65
7.2.3 注册com服务器 66
7.2.4 进程外服务器实现辅助 69
7.2.5 guid创建和优化 71
7.3 持续对象状态 72
7.3.1 持续对象接口 72
7.3.2 初始化持续对象 73
7.4 提供类信息 73
7.5 内部对象通信 73
第8章 生成和处理异步调用 79
8.1 生成和取消异步调用 79
8.1.1 生成异步调用 80
8.1.2 在异步调用中的客户安全性 81
8.1.3 扮演和异步调用 81
8.1.4 取消异步调用 81
8.2 取消方法调用 82
8.3 调用同步 82
第9章 定义com接口 84
9.1 接口调度 84
9.2 剖析idl文件 85
9.3 midl编译器 87
9.4 midl编译选项 88
9.5 加载和注册类型库 88
9.6 建立和注册代理dll 89
9.7 接口设计规则 90
9.7.1 设计远程接口 91
9.7.2 使用com接口 91
第10章 注册com应用程序 94
10.1 注册表分层结构 94
10.2 类和服务器 94
10.3 将组件分类 94
10.4 使用oleview 95
10.5 注册表编辑器 95
10.6 注册组件 95
10.7 检查注册 96
10.8 未知用户类型 96
10.9 com注册键 96
第11章 com中的安全 98
11.1 确定安全需求 98
11.2 默认com安全 99
11.3 激活安全 99
11.4 安全值 100
11.4.1 委派和扮演 100
11.4.2 应用程序身份 106
11.4.3 引用跟踪 108
11.5 为com应用程序设置安全 108
11.5.1 为计算机修改安全默认值 108
11.5.2 设置进程范围安全 111
11.5.3 在接口代理级设置安全 116
11.6 打开和关闭安全 117
11.6.1 关闭安全 117
11.6.2 使用dcomcnfg开启com
安全 119
11.7 com和安全包 119
11.8 ntlmssp 119
11.9 kerberos 120
11.10 schannel 121
11.11 snego 122
11.12 服务器端的安全 123
11.13 安全性覆盖协商 123
11.14 com安全、windows 95和
windows 98 124
11.14.1 windows95和windows98中的
调用级安全 124
11.14.2 windows95和windows98中的
远程连接和激活 125
11.14.3 仅含windows95和windows98
网络的安全 125
第12章 错误处理 126
12.1 com错误码的结构 126
12.2 facility_itf中的码 127
12.3 使用宏来进行错误处理 128
12.4 在java和visual basic中的错误处理 128
12.4.1 返回错误信息 129
12.4.2 检索错误信息 129
12.5 错误处理策略 130
12.5.1 hresult 130
12.5.2 win32和网络错误 130
12.6 处理未知错误 130
第13章 com处理程序 132
13.1 ole处理程序 132
13.2 轻便的客户端处理程序 133
13.2.1 实现和激活一个没有附加服务器
数据的处理程序 133
13.2.2 实现和激活一个有附加服务器数
据的处理程序 135
13.2.3 queryinterface的代理 136
第14章 dll代理 137
14.1 dll服务器需求 137
14.1.1 代理共享 137
14.1.2 为激活代理而注册dll服务器 138
14.2 使用系统提供的代理 139
14.3 定制代理 139
第15章 moniker 142
15.1 moniker客户程序 142
15.2 moniker提供者 142
15.3 ole moniker的实现 143
15.3.1 文件moniker 143
15.3.2 复合moniker 143
15.3.3 项目moniker 144
15.3.4 反moniker 145
15.3.5 指针moniker 145
15.3.6 类moniker 146
15.3.7 异步moniker 146
15.3.8 url moniker 149
第16章 com中的事件 152
16.1 可连接对象的体系结构 152
16.2 可连接对象接口 154
第17章 实现组件目录管理 157
17.1 根据组件的能力来分类 157
17.2 根据容器的能力来分类 158
17.3 组件目录管理器 159
17.4 默认类和关联 159
17.5 定义组件目录 160
17.6 将图标与组件目录相关联 160
第三部分 com 参 考
第18章 com接口 161
18.1 iaccesscontrol 161
18.2 iauthenticate 167
18.3 ibindctx 169
18.4 icallfactory 179
18.5 icancelmethodcalls 180
18.6 icatinformation 181
18.7 icatregister 187
18.8 iclassactivator 192
18.9 iclassfactory 193
18.10 iclassfactory2 196
18.11 iclientsecurity 200
18.12 iconnectionpoint 207
18.13 iconnectionpointcontainer 212
18.14 icontinuecallback 215
18.15 ienumxxxx 216
18.16 ienumconnectionpoints 218
18.17 ienumconnections 220
18.18 ienumstring 222
18.19 ienumunknown 222
18.20 ieventproperty 223
18.21 ieventpublisher 225
18.22 iexternalconnection 228
18.23 iglobalinterfacetable 231
18.24 iinternalunknown 235
18.25 imalloc 237
18.26 imallocspy 241
18.27 imarshal 250
18.28 imarshal—默认实现 260
18.29 imessagefilter 262
18.30 imoniker 268
18.31 imoniker—反moniker实现 291
18.32 imoniker—类 moniker实现 292
18.33 imoniker—文件moniker实现 293
18.34 imoniker—一般复合moniker实现 296
18.35 imoniker—项目moniker实现 298
18.36 imoniker—objref moniker实现 299
18.37 imoniker—指针moniker实现 301
18.38 imoniker—url moniker实现 302
18.39 imultiqi 305
18.40 ioleitemcontainer 307
18.41 iparsedisplayname 312
18.42 ipersist 314
18.43 ipersistfile 316
18.44 ipersistmoniker 322
18.45 ipersiststorage 327
18.46 ipersiststream 334
18.47 ipersiststream - url moniker实现 339
18.48 ipersiststreaminit 339
18.49 ipipebyte 342
18.50 ipipedouble 344
18.51 ipipelong 347
18.52 iprogressnotify 349
18.53 iprovideclassinfo 351
18.54 iprovideclassinfo2 352
18.55 iprovidemultipleclassinfo 353
18.56 irotdata 355
18.57 irunnableobject 357
18.58 irunningobjecttable 361
18.59 iserversecurity 370
18.60 istdmarshalinfo 374
18.61 isurrogate 375
18.62 isynchronize 378
18.63 isynchronizecontainer 379
18.64 isynchronizeevent 381
18.65 isynchronizehandle 382
18.66 iunknown 383
第19章 com函数 387
第20章 com 结构 501
第21章 com枚举类型数据 515
第22章 com注册项目 540
22.1 hkey_local_machine\software\
classes 540
22.2 appid 键 540
22.3 clsid键 546
22.4 progid键 558
22.5 versionindependentprogid键 560
22.6 file extension 键 560
22.7 (non-compound) filetype键 561
22.8 interface键 561
22.9 hkey_local_machine\
software\microsoft\ole 563
com+词汇表 568