《Visual C++实践与提高 COM和COM+篇》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:余英,梁刚编著
  • 出 版 社:北京:中国铁道出版社
  • 出版年份:2001
  • ISBN:7113040497
  • 页数:509 页
图书介绍:随着Internet的发展,微软的组件对象模型(COM)技术越来越受到开发人员和系统管理人员的重视。本书全面地介绍了COM应用开发技术。本书共分三部分13章,第一部分主要介绍COM规范和各种COM应用技术,第二部分通过丰富的实例讲授COM应用的开发技术,最后一部分重点介绍COM的最新版本COM+,包含DCOM、MTS、MSMQ等技术。本书实例丰富,讲述清晰,图文并茂。如果你具有一定VC++编程基础,并正在寻求对COM/COM+开发技术的快速入门,那么本书将非常适合你。循序渐进,攻克COM。从读者熟悉的地方入手,循序渐进地推出COM的基本思想与重要概念。在简明易懂的语言描述中,读者已经忘记COM原是一个多么复杂的规范。实例丰富,精心制作。平均每章都有3-4个精心制作的例子程序,其中包括供读者学习的简单例程,和即学即有的实用性例程。结构分明,精心组织。章节结构分明,由浅入深,全书结构一致,让读者在循序渐进中轻松上手。选择阅读,方式多多。按照实际需要,读者可以选择不同阅读方式。书中的相关新闻记者建议可以让不同读者最快获取最需要的知识。

第1章 COM背景知识 1

1.1 COM的起源 1

1.1.1 软件业面临的挑战 2

1.1.2 传统解决方案 2

1.1.3 面向对象程序设计方法 3

1.1.4 最终解决方案:组件软件 3

1.1.5 面向对象的组件模型——COM 5

1.2 COM的发展历程 7

1.2.1 COM以前的对象技术:DDE、OLE1、VBX控件 7

1.2.2 COM首次亮相:OLE2 8

1.2.3 Microsoft拥抱Internet:ActiveX 9

1.2.4 更多的新名词:Windows DNA和COM+ 10

1.2.5 远程对象:ORBs和DCOM 11

1.2.6 COM的最新版本:COM+ 11

1.3 COM技术现状 12

1.3.1 COM与CORBA 12

1.3.2 COM与Enterprise Java Beans 13

1.3.3 Windows之外的COM 14

小结 14

第2章 从C++到COM 15

2.1 C++客户重用CH对象——例程DB 15

2.1.1 C++对象 16

2.1.2 客户程序 18

2.2 将C++对象移进DLL中——例程DB_cppdll 21

2.2.1 成员函数的引出 21

2.2.2 内存分配 21

2.2.3 Unicode/ASCII兼容 22

2.2.4 例程实现 22

2.2.4.1 修改接口文件 23

2.2.4.2 修改对象程序 24

2.2.4.3 修改客户程序 25

2.3 C++对象使用抽象基类——例程DB_vtbl 28

2.3.1 问题:私有数据成员被暴露 28

2.3.2 解决方案:抽象基类 28

2.3.2.1 什么是抽象基类(Abstract Base Class) 28

2.3.2.2 实现秘诀:虚函数(Virtual Functions) 29

2.3.3 使用抽象基类 29

2.3.4 例程实现 30

2.3.4.1 修改接口文件 30

2.3.4.2 修改对象程序 31

2.3.4.3 修改客户程序 32

2.4 改由COM库装载C++对象——例程dbalmostcom 33

2.4.1 COM库 33

2.4.2 对象创建的标准入口点 33

2.4.3 标准对象创建API 34

2.4.4 标准对象注册 34

2.4.5 例程实现 35

2.4.5.1 修改接口文件 35

2.4.5.2 修改对象程序 35

2.4.5.3 修改客户程序 37

2.5 将C++对象变成COM对象 38

2.5.1 引用计数 39

2.5.2 多接口 39

2.5.3 IUnknown接口 40

2.5.4 标准类厂接口:IClassFactory 40

2.5.5 对象代码的动态卸载 41

2.5.6 自动注册 42

2.5.7 例程实现 42

2.5.7.1 修改接口文件 42

2.5.7.2 修改对象程序 43

2.5.7.3 修改客户程序 50

2.6 为COM对象添加多接口支持 51

2.6.1 多接口 51

2.6.2 DEFINE_GUID 53

2.6.3 例程实现 53

2.6.3.1 修改接口文件 53

2.6.3.2 修改对象程序 55

2.6.3.3 修改客户程序 56

小结 57

第3章 COM基础知识 59

3.1 对象与接口 59

3.1.1 COM对象 60

3.1.2 COM接口 61

3.1.3 IUnknown接口 62

3.1.3.1 生存期控制:AddRef和Release 63

3.1.3.2 接口查询:QueryInterface 64

3.1.4 全球唯一标识符GUID 64

3.1.5 COM接口定义 65

3.1.6 接口描述语言IDL 67

3.2 COM应用模型 68

3.2.1 客户/服务器模型 69

3.2.2 进程内组件 70

3.2.3 进程外组件 70

3.2.4 COM库 72

3.2.5 HRESULT返回值 73

3.2.6 COM与注册表 75

3.3 COM组件 78

3.3.1 实现类厂对象 78

3.3.2 类厂对象的创建 80

3.3.3 实现自动注册 82

3.3.4 实现自动卸载 83

3.4 COM客户 84

3.4.1 COM对象创建函数 84

3.4.1.1 CoGetClassObject 84

3.4.1.2 CoCreateInstance 85

3.4.1.3 CoCreateInstanceEx 86

3.4.2 如何调用进程内组件 87

3.4.3 COM客户调用进程外组件 89

3.5 进一步认识COM 91

3.5.1 可重用机制:包容和聚合 91

3.5.2 进程透明性 93

3.5.3 安全性机制 94

小结 95

第4章 COM扩展技术 97

4.1 可连接对象机制 97

4.1.1 客户、接收器与可连接对象 98

4.1.1.1 接收器 98

4.1.1.2 可连接对象 98

4.1.1.3 客户 99

4.1.2 实现可连接对象 99

4.1.3 实现接收器 100

4.1.4 建立接收器与连接点的连接 101

4.1.5 获得出接口的类型信息 102

4.2 结构化存储 102

4.2.1 什么叫结构化存储和复合文件 103

4.2.2 存储对象和IStorage接口 104

4.2.2.1 IStorage接口 104

4.2.2.2 获得IStorage指针 105

4.2.2.3 释放STATSTG内存 105

4.2.2.4 枚举存储对象中的元素 106

4.2.3 流对象和IStream接口 106

4.2.4 结构化存储示例——例程StructStore 107

4.3 永久对象 113

4.3.1 永久接口 114

4.3.2 永久对象编程——例程PersistText 116

4.3.3 永久对象客户编程——例程PersistClient 120

4.4 命名与绑定技术 125

4.4.1 COM名字对象与IMoniker 126

4.4.2 COM系统名字对象 128

4.4.2.1 文件名字对象(file moniker) 128

4.4.2.2 复合名字对象(composite moniker) 128

4.4.2.3 单项名字对象(item moniker) 129

4.4.2.4 反-名字对象 130

4.4.2.5 指针名字对象 130

4.4.2.6 类名字对象 130

4.4.3 使用名字对象 131

4.4.3.1 获得名字对象 131

4.4.3.2 执行绑定操作 131

4.5 统一数据传输 132

4.5.1 数据交换与传输协议的分离 132

4.5.2 数据格式和传输介质 133

4.5.2.1 FORMATETC结构 133

4.5.2.2 STGMEDIUM结构 135

4.5.3 数据对象和IDataObject接口 137

4.5.4 MFC对统一数据传输的支持 138

4.5.4.1 COleDataSource类 138

4.5.4.2 COleDataObject 139

4.5.5 剪贴板传输——例程OleClip 140

4.5.6 OLE拖放——例程OleDragDrop 145

小结 148

第5章 COM技术的应用 149

5.1 基于COM的应用技术 150

5.1.1 COM、OLE与ActiveX 150

5.1.2 OLE文档 151

5.1.3 自动化 152

5.1.4 ActiveX控件 153

5.1.5 ActiveX文档 154

5.2 理解在企业应用中使用COM组件的技术 155

5.2.1 多层软件结构模型 156

5.2.2 多层软件应用中的COM组件类型 158

5.2.3 组件的安装和注册 159

5.3 在Visual C++中使用ActiveX控件——例程VCActiveX 160

5.3.1 创建ActiveX控件包容器程序 160

5.3.2 加载ActiveX控件 161

5.3.3 设计时访问控件的属性 164

5.3.4 运行时访问控件的属性和方法 166

5.3.5 处理控件的事件 167

5.4 在Visual C++中使用代码组件 168

5.4.1 利用OLE/COM Obiect Viewer查看组件信息 169

5.4.2 利用COM库函数使用代码组件——例程VCAuotCom 171

5.4.3 通过ClassWizard使用代码组件——例程VCAuotClw 174

5.4.4 利用#import指令使用代码组件——例程VCAutoImport 176

5.4.4.1 #import指令和智能指针 176

5.4.4.2 创建VCAutoImport例程 178

5.5 在Visual Basic中使用COM组件 180

5.5.1 使用ActiveX控件——例程VBActiveX 180

5.5.2 使用代码组件——例程VBAuto 184

5.6 在Web站点中使用COM组件 187

5.6.1 COM在多层Web应用程序中的重要作用 187

5.6.2 在客户端使用ActiveX控件 188

5.6.3 在服务器端使用代码组件 191

小结 193

第6章 用VC开发COM应用 195

6.1 VC对COM的支持 195

6.1.1 类库支持:MFC和ATL 196

6.1.2 比较MFC和ATL 196

6.2 MFC对COM开发的支持 197

6.2.1 MFC简介 198

6.2.2 MFC对自动化的支持 200

6.2.2.1 MFC AppWizard支持 200

6.2.2.2 CCmdTarget类支持 201

6.2.3 MFC对复合文档的支持 202

6.2.4 MFC对ActiveX控件的支持 203

6.3 使用MFC开发COM组件——例程MFCSample 204

6.3.1 创建一个进程内自动化组件工程 204

6.3.2 分析新建工程文件 205

6.3.3 添加COM对象类 207

6.3.4 为接口添加属性 207

6.3.5 为接口添加方法 209

6.3.6 创建并测试组件 210

6.4 探讨MFC实现COM的内幕 210

6.4.1 MFC COM对象的实现 210

6.4.2 MFC COM引出函数和类厂实现 216

6.5 ATL基础知识 219

6.5.1 ATL简介 219

6.5.2 模板和多继承 220

6.5.3 几个重要的类 222

6.5.3.1 CComModule 223

6.5.3.2 CComObjectRoot/CComObjectRootEx 223

6.5.3.3 CComCoClass 224

6.5.3.4 CComObject 224

6.6 使用ATL开发COM组件——例程ATLSample 224

6.6.1 创建一个新的ATL工程 224

6.6.2 分析工程文件 226

6.6.3 添加新的对象类 228

6.6.4 为接口添加属性 231

6.6.5 为接口添加方法 233

6.6.6 创建并测试组件 235

6.7 探讨ATL实现COM的内幕 235

6.7.1 ATL COM对象的实现 235

6.7.2 ATL COM引出函数和类厂实现 236

6.7.3 注册脚本文件(.RGS) 238

6.8 调试COM组件 239

6.8.1 调试COM组件DLL 239

6.8.2 调试COM组件EXE 239

小结 240

第7章 自动化 241

7.1 自动化技术基础 241

7.1.1 自动化:C++与VBA的桥梁 241

7.1.2 自动化组件与自动化客户 242

7.1.3 IDispatch接口 243

7.1.3.1 GetTypeInfoCount和GetTypeInfo 244

7.1.3.2 GetIDsOfNames 244

7.1.3.3 Invoke 244

7.1.4 类型库和ODL 245

7.1.5 VARIANT数据类型 247

7.2 用MFC开发自动化组件——例程MFCSampleExe 249

7.2.1 创建最小的MFC自动化EXE工程 249

7.2.2 添加COM对象类、接口、属性和方法 251

7.2.3 在Excel中测试组件 252

7.3 用ATL开发自动化组件——例程ATLSampleExe 254

7.3.1 利用ATL COM AppWizard创建进程外组件 254

7.3.2 分析ATL进程外组件与进程内组件的差别 255

7.3.2.1 文件生成差别 255

7.3.2.2 StdAfx.h文件差别 255

7.3.2.3 ATLSampleExe.cpp文件差别 256

7.3.3 增加COM对象类、属性和方法 257

7.3.4 测试ATL SanpleExe.Account中测试组件 258

7.4 位于业务逻辑层的代码组件 258

7.4.1 ADO对象模型和基本编程模型 258

7.4.2 在Visual C++中使用ADO 260

7.4.2.1 使用#import指令 261

7.4.2.2 利用ClassWizard加载ADO对象类 263

7.4.2.3 通过COM API使用ADO 264

7.4.3 创建使用ADO的代码组件——例程ADOSamp 265

7.4.4 创建数据源 269

7.4.5 编写客户程序 272

7.4.6 三层软件应用模型 275

小结 275

第8章 OLE文档与ActiveX文档 277

8.1 OLE文档基础知识 277

8.1.1 OLE文档服务器与包容器 278

8.1.2 OLE服务体系结构 280

8.1.3 链接与嵌入技术 282

8.1.4 现场激活技术 285

8.1.5 MFC对OLE文档的支持 287

8.2 创建现场激活OLE服务器——例程ScribbleOle 289

8.2.1 预览ScribbleOle程序 289

8.2.2 利用AppWizard创建OLE服务器工程 291

8.2.3 将OLE相关文件添进Scribble工程 292

8.2.4 使ScribbleOle真正具有OLE服务器特性 293

8.2.5 编辑OLE相关资源 296

8.2.6 为文档类添加程序特定的服务器支持 298

8.2.7 实现服务器对象 300

8.2.8 在视图类中实现现场支持 301

8.2.9 创建并测试OLE服务器 303

8.3 创建OLE包容器——例程Container 303

8.3.1 创建新的OLE包容器工程并测试 303

8.3.2 分析工程代码 304

8.3.2.1 CContainerApp 304

8.3.2.2 CContainerView 305

8.3.2.3 CContainerCntrItem 307

8.3.3 实现客户对象矩形 308

8.3.4 实现鼠标点击激活 309

8.3.5 实现对象的移动和改变大小 311

8.3.6 绘制多个嵌入对象 312

8.3.7 实现嵌入对象的删除 313

8.3.8 创建并测试Container程序 313

8.4 ActiveX文档——例程ScribbleActiveX 314

8.4.1 比较ActiveX文档与OLE文档(用户角度) 314

8.4.2 比较ActiveX文档与OLE文档(开发者角度) 315

8.4.3 开发ActiveX文档服务器 316

8.4.4 将OLE文档转换服务器改造为ActiveX文档服务器 317

8.4.5 在IE中测试ScribbleActiveX 318

8.4.6 ActiveX文档包容器程序的实现 319

小结 321

第9章 ActiveX控件 323

9.1 ActiveX控件基础知识 323

9.1.1 ActiveX控件的发展历史 323

9.1.2 ActiveX控件基本要求 325

9.1.3 库存属性、方法和事件 326

9.1.4 ActiveX控件与包容器的通信 327

9.1.4.1 IOleControl接口 328

9.1.4.2 IOleControlSite接口 328

9.1.5 属性页技术 330

9.2 Visual C++对ActiveX控件的支持 331

9.2.1 MFC对ActiveX控件的封装 331

9.2.2 ATL对ActiveX控件的封装 332

9.2.2.1 CcomControl类 332

9.2.2.2 CComControlBase 333

9.2.2.3 CWindowImpl和CWindowImplBase 333

9.2.3 ActiveX Control Test Container 333

9.3 用MFC开发ActiveX控件——例程MfcCircCtrl 333

9.3.1 使用MFC ActiveX ControlWizard创建控件框架 333

9.3.2 修改控件位图 336

9.3.3 添加库存属性 338

9.3.4 添加自定义属性 341

9.3.5 添加事件 345

9.3.6 实现属性表 348

9.4 用MFC编写聚合控件——例程TimeSheet 350

9.4.1 预览控件运行效果 350

9.4.2 添加MFC ActiveX Form ClassWizard AppWizard 350

9.4.3 创建timesheet控件并添加MSFlexGird控件 351

9.4.4 编辑timesheet控件的单元格 356

9.4.5 创建并测试timesheet控件 358

9.5 用ATL开发ActiveX控件——例程AtlTickerCtrl 359

9.5.1 预览控件效果 359

9.5.2 创建工程框架添加控件对象 360

9.5.3 分析代码并测试新控件 362

9.5.4 实现滚动显示 363

9.5.5 提供修改滚动速度的接口 365

9.5.6 获取股价信息 366

9.5.7 绘制控件 367

9.5.8 响应环境属性的变化 369

9.5.9 增加事件 370

9.5.10 为库存属性设置缺省值 372

9.5.11 实现属性表 373

小结 376

第10章 Internet COM组件 377

10.1 ActiveX控件与Internet 377

10.1.1 Internet对ActiveX控件提出的新要求 377

10.1.2 ActiveX控件的安全设置 379

10.1.2.1 设置初始化安全性 379

10.1.2.2 设置脚本安全性 380

10.1.2.3 安全标志的局限性 380

10.1.3 设置ActiveX控件的安全级别 381

10.1.3.1 修改注册表 381

10.1.3.2 使用IObjectSafety 382

10.1.4 ActiveX控件的数字签名 383

10.1.5 Active控件的使用许可 384

10.1.6 包装AcitveX控件 385

10.2 改造Ticker控件——例程IETickerCtrl 388

10.2.1 ATL轻型控件 388

10.2.2 标记控件为初始化/脚本安全 389

10.2.3 持续属性 391

10.3 在ActiveX控件中访问DOM对象 393

10.3.1 什么是DOM(文档对象模型) 393

10.3.2 在ActiveX控件中访问DoM——例程DOMSamp 395

10.3.3 测试DOMCtrl控件 398

10.4 活动服务器组件 399

10.4.1 活动服务器页面(ASP) 399

10.4.2 ASP内建对象 400

10.4.2.1 Application对象 400

10.4.2.2 Session对象 401

10.4.2.3 Request对象 401

10.4.2.4 Response对象 401

10.4.2.5 Server对象 401

10.4.2.6 ObjectContext对象 401

10.4.3 创建活动服务器组件——例程ASPComSamp 401

10.4.4 在ASP中测试ASPComp组件 406

小结 407

第11章 从COM到COM+:DcoM、MTS 409

11.1 从COM到COM+ 410

11.2 分布式COM(DCOM) 411

11.2.1 什么是DCOM 412

11.2.2 DCOM特性 412

11.2.3 DCOM的基本结构 413

11.2.4 列集(marshaling) 415

11.2.5 RPC(远过程调用) 415

11.2.6 DCOM对象的定位与远程激活 416

11.2.6.1 用DCOM配置工具指定远程服务器名 416

11.2.6.2 在客户代码中指定远程服务器名 417

11.2.7 远程创建DLL组件:代理进程(surrogate) 418

11.2.8 IUnknown优化 418

11.2.9 DCOM安全机制 419

11.3 DCOM组件的开发与部署 420

11.3.1 基于NT服务的DCOM服务器——例程DCOMServ 420

11.3.2 测试服务程序 422

11.3.3 DCOMCNFG实用程序 424

11.3.3.1 缺省属性 425

11.3.3.2 缺省安全性 426

11.3.3.3 缺省协议 426

11.3.3.4 应用程序特定设置 427

11.4 微软事务服务器(MTS) 428

11.4.1 MTS概述 428

11.4.1.1 MTS运行时环境 429

11.4.1.2 MTS Explorer 429

11.4.1.3 MTS APIs 429

11.4.2 MTS应用基本结构 430

11.4.2.1 应用组件 430

11.4.2.2 资源管理器 431

11.4.2.3 资源分发器 431

11.4.2.4 Microsoft DTC 431

11.4.3 MTS对象与环境对象 431

11.4.3.1 MTS对象的环境对象 432

11.4.3.2 创建MTS对象 433

11.4.3.3 事务环境对象 434

11.4.4 MTS客户 434

11.4.5 事务(Transaction) 434

11.4.6 即时激活(just-in-time activation) 436

11.4.7 安全性控制 437

11.4.7.1 基本的安全性函数 437

11.4.7.2 高级安全性方法 438

11.5 MTS组件的开发与管理 438

11.5.1 MTS组件的要求 439

11.5.2 创建一个简单的COM组件——例程MTSServ 439

11.5.3 MTS Explorer 440

11.5.4 将Account组件添加到MTS环境中 442

11.5.5 运行并监控Account组件 443

11.6 微软消息队列(MSMQ) 444

11.6.1 何谓MSMQ 445

11.6.2 MSMQ的好处 445

11.6.3 MSMQ组件 446

11.6.3.1 队列 446

11.6.3.2 消息 446

11.6.4 MSMQ对象模型 446

11.6.5 消息发送 447

11.6.5.1 生成MSMOQueueInfo对象 447

11.6.5.2 设置去队列的路径 448

11.6.5.3 生成和打开队列 448

11.6.5.4 生成MSMQMessage对象 448

11.6.5.5 填入消息内容 448

11.6.5.6 发送消息 449

11.6.5.7 关闭队列 449

11.6.6 消息接收 449

11.6.7 MSMQ事件 450

11.6.7.1 生成消息事件对象 450

11.6.7.2 设置事件 450

11.6.7.3 生成事件处理器 451

小结 451

第12章 COM+服务 453

12.1 COM+概述 453

12.1.1 Windows DNA策略 454

12.1.2 COM+基本结构 455

12.1.3 COM+程序管理工具 456

12.2 COM+系统结构 457

12.2.1 COM+组件 458

12.2.2 COM+目录 458

12.2.3 COM+环境 461

12.3 COM+对MTS服务的增强 463

12.3.1 事务特性 463

12.3.2 安全性 464

12.3.3 同步服务 466

12.3.4 COM+对象池 467

12.4 COM+新增系统服务 468

12.4.1 COM+队列组件 469

12.4.2 COM+事件模型 471

12.4.3 负载平衡 473

12.3.4 内存数据库 474

小结 476

第13章 COM+应用开发 477

13.1 最简单的COM+组件——例程Stepl 477

13.1.1 创建一个最简单的COM+组件 477

13.1.2 创建一个空的COM+应用程序 478

13.1.3 将Account组件安装到COM+应用程序中 480

13.1.4 运行和监控Account组件 482

13.2 使用ODBC资源分发器——例程Step2 483

13.2.1 创建数据源 483

13.2.2 修改Step1程序 483

13.2.3 重新安装并测试组件 487

13.3 创建规模可变的组件——例程Step3 488

13.3.1 即时激活特性 489

13.3.2 修改Step2程序 489

13.3.3 重新安装并测试组件 490

13.4 创建事务性组件——例程Step4 490

13.4.1 修改Step3程序并重新安装组件 491

13.4.2 为组件设置事务属性 493

13.4.3 监控事务操作 494

13.5 利用共享属性管理器共享状态——例程Step5 496

13.5.1 共享属性管理器 496

13.5.2 修改Step4程序 497

13.5.3 测试组件 500

13.6 使用多事务处理——例程Step6 501

13.6.1 修改Step5程序 501

13.6.2 测试组件 505

13.7 使用基于角色的安全性——例程Step7 506

13.7.1 修改Step6程序并测试 506

13.7.2 添加或删除角色 507

13.7.3 给角色分配用户帐户或组 507

13.7.4 重新测试组件 508

小结 509