文件名称:Visual C++实践与提高-COM和COM+篇『PDF』
文件大小:14.31MB
文件格式:RAR
更新时间:2012-06-11 14:53:27
vc++ 实践与提高 COM COM+
因文件超过20M不能上传,所以拆分为两个文件分次上传 第1章 COM背景知识 1.1 COM的起源 1.1.1 软件业面临的挑战 1.1.2 传统解决方案 1.1.3 面向对象程序设计方法 1.1.4 最终解决方案:组件软件 1.1.5 面向对象的组件模型——COM 1.2 COM的发展历程 1.2.1 COM以前的对象技术:DDE、OLE 1、VBX控件 1.2.2 COM首次亮相:OLE2 1.2.3 Microsoft拥抱Internet:ActiveX 1.2.4 更多的新名词:Windows DNA和COM+ 1.2.5 远程对象:ORBs和DCOM 1.2.6 COM的最新版本:COM+ 1.3 COM技术现状 1.3.1 COM与CORBA 1.3.2 COM与Enterprise Java Beans 1.3.3 Windows之外的COM 小结 第2章 从C++到COM 2.1 C++客户重用C++对象——例程DB 2.1.1 C++对象 2.1.2 客户程序 2.2 将C++对象移进DLL中——例程DB_cppdll 2.2.1 成员函数的引出 2.2.2 内存分配 2.2.3 Unicode/ASCII兼容 2.2.4 例程实现 2.2.4.1 修改接口文件 2.2.4.2 修改对象程序 2.2.4.3 修改客户程序 2.3 C++对象使用抽象基类——例程DB_vtbl 2.3.1 问题:私有数据成员被暴露 2.3.2 解决方案:抽象基类 2.3.2.1 什么是抽象基类(Abstract Base Class) 2.3.2.2 实现秘诀:虚函数(Virtual Functions) 2.3.3 使用抽象基类 2.3.4 例程实现 2.3.4.1 修改接口文件 2.3.4.2 修改对象程序 2.3.4.3 修改客户程序 2.4 改由COM库装载C++对象——例程dbalmostcom 2.4.1 COM库 2.4.2 对象创建的标准入口点 2.4.3 标准对象创建API 2.4.4 标准对象注册 2.4.5 例程实现 2.4.5.1 修改接口文件 2.4.5.2 修改对象程序 2.4.5.3 修改客户程序 2.5 将C++对象变成COM对象 2.5.1 引用计数 2.5.2 多接口 2.5.3 IUnknown接口 2.5.4 标准类厂接口:IClassFactory 2.5.5 对象代码的动态卸载 2.5.6 自动注册 2.5.7 例程实现 2.5.7.1 修改接口文件 2.5.7.2 修改对象程序 2.5.7.3 修改客户程序 2.6 为COM对象添加多接口支持 2.6.1 多接口 2.6.2 DEFINE_GUID 2.6.3 例程实现 2.6.3.1 修改接口文件 2.6.3.2 修改对象程序 2.6.3.3 修改客户程序 小结 第3章 COM基础知识 3.1 对象与接口 3.1.1 COM对象 3.1.2 COM接口 3.1.3 IUnknown接口 3.1.3.1 生存期控制:AddRef和Release 3.1.3.2 接口查询:QueryInterface 3.1.4 全球唯一标识符GUID 3.1.5 COM接口定义 3.1.6 接口描述语言IDL 3.2 COM应用模型 3.2.1 客户/服务器模型 3.2.2 进程内组件 3.2.3 进程外组件 3.2.4 COM库 3.2.5 HRESULT返回值 3.2.6 COM与注册表 3.3 COM组件 3.3.1 实现类厂对象 3.3.2 类厂对象的创建 3.3.3 实现自动注册 3.3.4 实现自动卸载 3.4 COM客户 3.4.1 COM对象创建函数 3.4.1.1 CoGetClassObject 3.4.1.2 CoCreateInstance 3.4.1.3 CoCreateInstanceEx 3.4.2 如何调用进程内组件 3.4.3 COM客户调用进程外组件 3.5 进一步认识COM 3.5.1 可重用机制:包容和聚合 3.5.2 进程透明性 3.5.3 安全性机制 小结 第4章 COM扩展技术 4.1 可连接对象机制 4.1.1 客户、接收器与可连接对象 4.1.1.1 接收器 4.1.1.2 可连接对象 4.1.1.3 客户 4.1.2 实现可连接对象 4.1.3 实现接收器 4.1.4 建立接收器与连接点的连接 4.1.5 获得出接口的类型信息 4.2 结构化存储 4.2.1 什么叫结构化存储和复合文件 4.2.2 存储对象和IStorage接口 4.2.2.1 IStorage接口 4.2.2.2 获得IStorage指针 4.2.2.3 释放STATSTG内存 4.2.2.4 枚举存储对象中的元素 4.2.3 流对象和IStream接口 4.2.4 结构化存储示例——例程StructStore 4.3 永久对象 4.3.1 永久接口 4.3.2 永久对象编程——例程PersistText 4.3.3 永久对象客户编程——例程PersistClient 4.4 命名与绑定技术 4.4.1 COM名字对象与IMoniker 4.4.2 COM系统名字对象 4.4.2.1 文件名字对象(file moniker) 4.4.2.2 复合名字对象(composite moniker) 4.4.2.3 单项名字对象(item moniker) 4.4.2.4 反-名字对象 4.4.2.5 指针名字对象 4.4.2.6 类名字对象 4.4.3 使用名字对象 4.4.3.1 获得名字对象 4.4.3.2 执行绑定操作 4.5 统一数据传输 4.5.1 数据交换与传输协议的分离 4.5.2 数据格式和传输介质 4.5.2.1 FORMATETC结构 4.5.2.2 STGMEDIUM结构 4.5.3 数据对象和IDataObject接口 4.5.4 MFC对统一数据传输的支持 4.5.4.1 COleDataSource类 4.5.4.2 COleDataObject 4.5.5 剪贴板传输——例程OleClip 4.5.6 OLE拖放——例程OleDragDrop 小结 第5章 COM技术的应用 5.1 基于COM的应用技术 5.1.1 COM、OLE与ActiveX 5.1.2 OLE文档 5.1.3 自动化 5.1.4 ActiveX控件 5.1.5 ActiveX文档 5.2 理解在企业应用中使用COM组件的技术 5.2.1 多层软件结构模型 5.2.2 多层软件应用中的COM组件类型 5.2.3 组件的安装和注册 5.3 在Vsual C++中使用ActiveX控件——例程VCActiveX 5.3.1 创建ActiveX控件包容器程序 5.3.2 加载ActiveX控件 5.3.3 设计时访问控件的属性 5.3.4 运行时访问控件的属性和方法 5.3.5 处理控件的事件 5.4 在Visual C++中使用代码组件 5.4.1 利用OLE/COM Object Viewer查看组件信息 5.4.2 利用COM库函数使用代码组件——例程VCAuotCom 5.4.3 通过ClassWizard使用代码组件——例程VCAuotClw 5.4.4 利用#import指令使用代码组件——例程VCAutoImport 5.4.4.1 #import指令和智能指针 5.4.4.2 创建VCAutoImport例程 5.5 在Visual Basic中使用COM组件 5.5.1 使用ActiveX控件——例程VBActiveX 5.5.2 使用代码组件——例程VBAuto 5.6 在Web站点中使用COM组件 5.6.1 COM在多层Web应用程序中的重要作用 5.6.2 在客户端使用ActiveX控件 5.6.3 在服务器端使用代码组件 小结 第6章 用VC 4开发COM应用 6.1 VC对COM的支持 6.1.1 类库支持:MFC和ATL 6.1.2 比较MFC和ATL 6.2 MFC对COM开发的支持 6.2.1 MFC简介 6.2.2 MFC对自动化的支持 6.2.2.1 MFC AppWizard支持 6.2.2.2 CCmdTarget类支持 6.2.3 MFC对复合文档的支持 6.2.4 MFC对ActiveX控件的支持 6.3 使用MFC开发COM组件——例程MFCSample 6.3.1 创建一个进程内自动化组件工程 6.3.2 分析新建工程文件 6.3.3 添加COM对象类 6.3.4 为接口添加属性 6.3.5 为接口添加方法 6.3.6 创建并测试组件 6.4 探讨MFC实现COM的内幕 6.4.1 MFC COM对象的实现 6.4.2 MFC COM引出函数和类厂实现 6.5 ATL基础知识 6.5.1 ATL简介 6.5.2 模板和多继承 6.5.3 几个重要的类 6.5.3.1 CComModule 6.5.3.2 CComObjectRoot/CComObjectRootEx 6.5.3.3 CComCoClass 6.5.3.4 CComObject 6.6 使用ATL开发COM组件——例程ATLSample 6.6.1 创建一个新的ATL工程 6.6.2 分析工程文件 6.6.3 添加新的对象类 6.6.4 为接口添加属性 6.6.5 为接口添加方法 6.6.6 创建并测试组件 6.7 探讨ATL实现COM的内幕 6.7.1 ATL COM对象的实现 6.7.2 ATL COM引出函数和类厂实现 6.7.3 注册脚本文件(.RGS) 6.8 调试COM组件 6.8.1 调试COM组件DLL 6.8.2 调试COM组件EXE 小结 第7章 自动化 7.1 自动化技术基础 7.1.1 自动化:C++与VBA的桥梁 7.1.2 自动化组件与自动化客户 7.1.3 IDispatch接口 7.1.3.1 GetTypeInfoCount和GetTypeInfo 7.1.3.2 GetIDsOfNames 7.1.3.3 Invoke 7.1.4 类型库和ODL 7.1.5 VARIANT数据类型 7.2 用MFC开发自动化组件——例程MFCSampleExe 7.2.1 创建最小的MFC自动化EXE工程 7.2.2 添加COM对象类、接口、属性和方法 7.2.3 在Excel中测试组件 7.3 用ATL开发自动化组件——例程ATLSampleExe 7.3.1 利用ATL COM AppWizard创建进程外组件 7.3.2 分析ATL进程外组件与进程内组件的差别 7.3.2.1 文件生成差别 7.3.2.2 StdAfx.h文件差别 7.3.2.3 ATLSampleExe.cpp文件差别 7.3.3 增加COM对象类、属性和方法 7.3.4 测试ATL SanpleExe.Account中测试组件 7.4 位于业务逻辑层的代码组件 7.4.1 ADO对象模型和基本编程模型 7.4.2 在Visual C++中使用ADO 7.4.2.1 使用#import指令 7.4.2.2 利用ClassWizard加载ADO对象类 7.4.2.3 通过COM API使用ADO 7.4.3 创建使用ADO的代码组件——例程ADOSamp 7.4.4 创建数据源 7.4.5 编写客户程序 7.4.6 三层软件应用模型 小结 第8章 OLE文档与ActiveX文档 8.1 OLE文档基础知识 8.1.1 OLE文档服务器与包容器 8.1.2 OLE服务体系结构 8.1.3 链接与嵌入技术 8.1.4 现场激活技术 8.1.5 MFC对OLE文档的支持 8.2 创建现场激活OLE服务器——例程ScribbleOle 8.2.1 预览ScribbleOle程序 8.2.2 利用AppWizard创建OLE服务器工程 8.2.3 将OLE相关文件添进Scribble工程 8.2.4 使ScribbleOle真正具有OLE服务器特性 8.2.5 编辑OLE相关资源 8.2.6 为文档类添加程序特定的服务器支持 8.2.7 实现服务器对象 8.2.8 在视图类中实现现场支持 8.2.9 创建并测试OLE服务器 8.3 创建OLE包容器——例程Container 8.3.1 创建新的OLE包容器工程并测试 8.3.2 分析工程代码 8.3.2.1 CContainerApp 8.3.2.2 CContainerView 8.3.2.3 CContainerCntrItem 8.3.3 实现客户对象矩形 8.3.4 实现鼠标点击激活 8.3.5 实现对象的移动和改变大小 8.3.6 绘制多个嵌入对象 8.3.7 实现嵌入对象的删除 8.3.8 创建并测试Container程序 8.4 ActiveX文档——例程ScribbleActiveX 8.4.1 比较ActiveX文档与OLE文档(用户角度) 8.4.2 比较ActiveX文档与OLE文档(开发者角度) 8.4.3 开发ActiveX文档服务器 8.4.4 将OLE文档转换服务器改造为ActiveX文档服务器 8.4.5 在IE中测试ScribbleActiveX 8.4.6 ActiveX文档包容器程序的实现 小结 第9章 ActiveX控件 9.1 ActiveX控件基础知识 9.1.1 ActiveX控件的发展历史 9.1.2 ActiveX控件基本要求 9.1.3 库存属性、方法和事件 9.1.4 ActiveX控件与包容器的通信 9.1.4.1 IOleControl接口 9.1.4.2 IOleControlSite接口 9.1.5 属性页技术 9.2 ActiveX C++对ActiveX控件的支持 9.2.1 MFC对ActiveX控件的封装 9.2.2 ATL对ActiveX控件的封装 9.2.2.1 CcomControl类 9.2.2.2 CComControlBase 9.2.2.3 CWindowImpl和CWindowImplBase 9.2.3 ActiveX Control Test Container 9.3 用MFC开发ActiveX控件——例程MfcCircCtrl 9.3.1 使用MFC ActiveX ControlWizard创建控件框架 9.3.2 修改控件位图 9.3.3 添加库存属性 9.3.4 添加自定义属性 9.3.5 添加事件 9.3.6 实现属性表 9.4 用MFC编写聚合控件——例程TimeSheet 9.4.1 预览控件运行效果 9.4.2 添加MFC ActiveX Form ClassWizard AppWizard 9.4.3 创建timesheet控件并添加MSFlexGird控件 9.4.4 编辑timesheet控件的单元格 9.4.5 创建并测试timesheet控件 9.5 用ATL开发ActiveX控件——例程AtlTickerCtrl 9.5.1 预览控件效果 9.5.2 创建工程框架添加控件对象 9.5.3 分析代码并测试新控件 9.5.4 实现滚动显示 9.5.5 提供修改滚动速度的接口 9.5.6 获取股价信息 9.5.7 绘制控件 9.5.8 响应环境属性的变化 9.5.9 增加事件 9.5.10 为库存属性设置缺省值 9.5.11 实现属性表 小结 第10章 Internet COM组件 10.1 ActiveX控件与Internet 10.1.1 Internet对ActiveX控件提出的新要求 10.1.2 ActiveX控件的安全设置 10.1.2.1 设置初始化安全性 10.1.2.2 设置脚本安全性 10.1.2.3 安全标志的局限性 10.1.3 设置ActiveX控件的安全级别 10.1.3.1 修改注册表 10.1.3.2 使用IObjectSafety 10.1.4 ActiveX控件的数字签名 10.1.5 Active控件的使用许可 10.1.6 包装AcitveX控件 10.2 改造Ticker控件——例程IETickerCtrl 10.2.1 ATL轻型控件 10.2.2 标记控件为初始化/脚本安全 10.2.3 持续属性 10.3 在ActiveX控件中访问DOM对象 10.3.1 什么是DOM(文档对象模型) 10.3.2 在ActiveX控件中访问DOM——例程DOMSamp 10.3.3 测试DOMCtrl控件 10.4 活动服务器组件 10.4.1 活动服务器页面(ASP) 10.4.2 ASP内建对象 10.4.2.1 Application对象 10.4.2.2 Session对象 10.4.2.3 Request对象 10.4.2.4 Response对象 10.4.2.5 Server对象 10.4.2.6 ObjectContext对象 10.4.3 创建活动服务器组件——例程ASPComSamp 10.4.4 在ASP中测试ASPComp组件 小结 第11章 从COM到COM+:DCOM、MTS 11.1 从COM到COM+ 11.2 分布式COM(DCOM) 11.2.1 什么是DCOM 11.2.2 DCOM特性 11.2.3 DCOM的基本结构 11.2.4 列集(marshaling) 11.2.5 RPC(远过程调用) 11.2.6 DCOM对象的定位与远程激活 11.2.6.1 用DCOM配置工具指定远程服务器名 11.2.6.2 在客户代码中指定远程服务器名 11.2.7 远程创建DLL组件:代理进程(surrogate) 11.2.8 IUnknown优化 11.2.9 DCOM安全机制 11.3 DCOM组件的开发与部署 11.3.1 基于NT服务的DCOM服务器——例程DCOMServ 11.3.2 测试服务程序 11.3.3 DCOMCNFG实用程序 11.3.3.1 缺省属性 11.3.3.2 缺省安全性 11.3.3.3 缺省协议 11.3.3.4 应用程序特定设置 11.4 微软事务服务器(MTS) 11.4.1 MTS概述 11.4.1.1 MTS运行时环境 11.4.1.2 MTS Explorer 11.4.1.3 MTS APIs 11.4.2 MTS应用基本结构 11.4.2.1 应用组件 11.4.2.2 资源管理器 11.4.2.3 资源分发器 11.4.2.4 Microsoft DTC 11.4.3 MTS对象与环境对象 11.4.3.1 MTS对象的环境对象 11.4.3.2 创建MTS对象 11.4.3.3 事务环境对象 11.4.4 MTS客户 11.4.5 事务(Transaction) 11.4.6 即时激活(just-in-time activation) 11.4.7 安全性控制 11.4.7.1 基本的安全性函数 11.4.7.2 高级安全性方法 11.5 MTS组件的开发与管理 11.5.1 MTS组件的要求 11.5.2 创建一个简单的COM组件——例程MTSServ 11.5.3 MTS Explorer 11.5.4 将Account组件添加到MTS环境中 11.5.5 运行并监控Account组件 11.6 微软消息队列(MSMQ) 11.6.1 何谓MSMQ 11.6.2 MSMQ的好处 11.6.3 MSMQ组件 11.6.3.1 队列 11.6.3.2 消息 11.6.4 MSMQ对象模型 11.6.5 消息发送 11.6.5.1 生成MSMQQueueInfo对象 11.6.5.2 设置去队列的路径 11.6.5.3 生成和打开队列 11.6.5.4 生成MSMQMessage对象 11.6.5.5 填入消息内容 11.6.5.6 发送消息 11.6.5.7 关闭队列 11.6.6 消息接收 11.6.7 MSMQ事件 11.6.7.1 生成消息事件对象 11.6.7.2 设置事件 11.6.7.3 生成事件处理器 小结 第12章 COM+服务 12.1 COM+概述 12.1.1 Windows DNA策略 12.1.2 COM+基本结构 12.1.3 COM+程序管理工具 12.2 COM+系统结构 12.2.1 COM+组件 12.2.2 COM+目录 12.2.3 COM+环境 12.3 COM+对MTS服务的增强 12.3.1 事务特性 12.3.2 安全性 12.3.3 同步服务 12.3.4 COM+对象池 12.4 COM+新增系统服务 12.4.1 COM+队列组件 12.4.2 COM+事件模型 12.4.3 负载平衡 12.3.4 内存数据库 小结 第13章 COM+应用开发 13.1 最简单的COM+组件——例程Step1 13.1.1 创建一个最简单的COM+组件 13.1.2 创建一个空的COM+应用程序 13.1.3 将Account组件安装到COM+应用程序中 13.1.4 运行和监控Account组件 13.2 使用ODBC资源分发器——例程Step2 13.2.1 创建数据源 13.2.2 修改Step1程序 13.2.3 重新安装并测试组件 13.3 创建规模可变的组件——例程Step3 13.3.1 即时激活特性 13.3.2 修改Stap2程序 13.3.3 重新安装并测试组件 13.4 创建事务性组件——例程Step4 13.4.1 修改Step3程序并重新安装组件 13.4.2 为组件设置事务属性 13.4.3 监控事务操作 13.5 利用共享属性管理器共享状态——例程Steps 13.5.1 共享属性管理器 13.5.2 修改Step4程序 13.5.3 测试组件 13.6 使用多事务处理——例程Step6 13.6.1 修改Step5程序 13.6.2 测试组件 13.7 使用基于角色的安全性——例程Step7 13.7.1 修改Step6程序并测试 13.7.2 添加或删除角色 13.7.3 给角色分配用户帐户或组 13.7.4 重新测试组件