第15章:利用ATL编写COM组件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图 15.6 添加FirstToUpper方法
21
Visual C++
COM组件中添加方法 15.2.3 在COM组件中添加方法(续)
11
Visual C++
15.2
利用ATL创建COM组件 利用ATL创建COM组件 ATL创建COM
本节以一个字符串处理的组件为例来阐 述如何利用ATL来制作COM组件.编程的思 路为:(1)在VC下创建一个ATL工程,并 对工程的可选项进行设置;(2)向工程中 添加ATL对象,并对该对象进行一些初始配 置工作;(3)根据COM组件的功能,向新 3 COM 的ATL对象中加入新的接口定义,包括方法 和事件的定义,并实现相应的接口成员函数; (4)编译链接该工程,注册COM组件;(5) 编写组件测试程序,验证组件的功能.
9
Visual C++
ATL简介 15.1.4 ATL简介
ATL(ActiveX Template Library,活动模板库)是一 套C++的模板库,利用它可以很方便地建立小型的,基 于COM的组件,对COM组件的开发提供了最大限度的代 码自动生成以及可视化的支持.模板是ATL的核心技术. 1.什么是模板 模板(Template)是基于类型参数产生类和函数的 一种机制.模板在不降低类型安全的基础上,可以显著 地减少代码量,增加代码的灵活性.模板包括函数模板 和类模板,本节只讲类模板. 2.类模板 类是对问题空间的抽象,而类模板则是对类的抽象, 即更高层次上的抽象.使用类模板,可以指定操作于某 个数据类型的一族类.在程序中可以首先定义一个类模 板,然后通过使用不同的实参生成不同模板类的对象. 10
能构成大型的组件以至建立整个系统.
5
Visual C++
COM有关的概念 15.1.3 与COM有关的概念
1.对象
对象代表现实中的某个实体,是类的实例.在COM 中,对象也是类的实例,但是COM对象与面向对象模型 的类对象有区别.COM是与软件开发语言无关,平台无 关,而面向对象模型中的类对象在不同的语言下是有区 别的.
MyCom.rc Resouce.h Stdafx.h Stdafx.cpp Str.rgs
17
Visual C++
在工程中添加ATL ATL对象 15.2.2 在工程中添加ATL对象
前面已经创建了一个MyCom工程,接下来,使用VC的 ATL Object Wizard工具,可以方便地往工程中添加ATL对 象. 1 . 选 择 Insert|New ATL Object,弹出如 图15.3所示的对话框, 从 Objects 列 表 框 中 选 择 Simple Object 项 后 , 单 击 " Next" 按钮继续.
4
Visual C++
15.1.2
COM与软件复用 COM与软件复用
在软件开发过程中,人们提出软件的制造 能否像硬件的生产一样,实现规约化的组装.答 案是肯定的,利用Microsoft的COM技术编写的 组件就可以达到这个目的. 软件复用避免了软件开发过程中的重复劳 动的解决方案,其出发点是应用系统的开发不再 采用一切"从零开始"的模式,每个COM组件 有自己的属性和操作,是一个相对独立运行的实 体.从软件复用种类的定义看,COM技术实质 上是一种模块复用的情况.采用组件开发软件就 像搭积木一样容易,组件单独开发并作为软件模 块使用,它具有明确的接口,客户通过这些接口 调用组件所能提供的服务,将多种组件拼装起来就
14
Visual C++
创建ATL应用程序框架( 创建ATL应用程序框架(续) ATL应用程序框架
2 . 单 击 "OK"按钮, 进入图15.2 所示的选择 ATL组件类 型对话框.
15.2 选择COM组件类型对话框
15
Visual C++
ቤተ መጻሕፍቲ ባይዱ
创建ATL应用程序框架 创建ATL应用程序框架(续) ATL
5.注册与注册表 组件编好之后,编译出来的DLL文 件还必须在注册表中注册后才能被其它 用户使用.因为只有这样,用户在创建 COM对象时,系统才能在注册表中获取 相应对象的位置,才能创建对象,对于 DLL型的组件,需要调用RegSvr32.exe 来完成,对于EXE型的组件,只要服务 器运行过一次,该组件就会自动进行注 册.返回
16
Visual C++
生成的MyCom工程中的文 表15.1 AppWizard生成的 生成的 工程中的文 件 return 文件名 文件说明
MyCom.cpp MyCom.def MyCom.idl 工程的主文件,其中有组件的接口函数和注册函数 工程的DLL模块定义文件,它与前面讲的DLL库中的Def文 件的含义相同 工程的接口定义语言文件,COM是靠接口定义语言来定义 组件间,组件与客户间的接口定义,它是COM组件的入口 点 工程的资源文件,与别的MFC程序的资源文件类似 工程的资源文件的头文件,与别的MFC程序的resource.h类 似 工程的标准头文件,与别的MFC程序的stdafx.h类似 工程的标准实现文件,与别的MFC程序的stdafx.cpp类似 工程的注册脚本文件
ATL组件类型一共有三种:第一种是DLL类 型;第二种是EXE类型;第三种是Service类型, 它也是一个典型的进程外组件.Service是 Windows2000的一种应用服务,当操作系统启 动的时候,该Server自动运行. 由于进程外组件的执行效率较低,我们选 择DLL类型的.选择完后,按"Finish"按钮, 结束ATL创建组件的向导生成步骤,最终在磁 盘上生成了组件的框架代码.表15.1列出了该 工程中的主要文件的信息.
Interface Ideposit:Iunknown { virtual HRESULT GetMoney (int *nMoney)=0; }; Iunknown接口很重要,其定义如下: Struct Iunknown { virtual HRESULT QueryInterface(REFID iid,void * * ppvobj)=0; //查询是否支持接口 virtual ULONG AddRef()=0; //引用计数加1 virtual ULONG Release()=0; //引用计数减1 }
2.接口
动态链接库DLL是通过导出一系列函数来让客户程序 使用的,只有知道了DLL的导出函数列表才能使用它. COM组件的载体也是一个DLL,COM组件是通过接口与客 户进行通讯的,但它是一个抽象类(含有纯虚函数的 类).下面是一个接口的简单定义:
6
Visual C++
与COM有关的概念(2) COM有关的概念(2)
图15.3插入一个基于ATL的COM类
18
Visual C++
在工程中添加ATL ATL对象 15.2.2 在工程中添加ATL对象(续)
2.系统弹出一个ATL Object Wizard Properties对话框.在 Short Name 中 输 入 Str, 在 COClass 编 辑 框 中 输 入 StrCom,如图15.4所示. 注意在Name选 项卡中, 可以键入类与文件名.默认情 况在,Short Name名字是其它 名字的词根.可以不接收默认 的名字而键入自己的名称. 图15.4窗口中的Class是对 象所实现的类的名称, CoClass为包含对象支持的一 些接口的名称,Interface为对 象创建的接口名字,Type为有 关注册对象的描述性字符串, Prog ID为容器所使用的名字 以代替对象的CLSID.
Visual C++
15.2.1 创建ATL应用程序框架 创建ATL应用程序框架 ATL
1.在VC开发环境下,选择 File|New菜单,将弹出的New 对话框切换到Projects选项卡 后 , 选 择 ATL COM AppWizard 项 , 在 Project name 编 辑 框 中 输 入 MyCom 工程名称,并设置好工程所 在的文件夹.如图右图所示.
图15.4 设置COM类的属性
19
Visual C++
在工程中添加ATL ATL对象 15.2.2 在工程中添加ATL对象(续)
3.切换到图15.5所 示的Attribute选项卡, 设 置 StrCom 对 象 的 属性,如组件的线程 模式,接口类以及是 否支持聚集等属性. 我们使用系统的默认 属性.单击"OK"按 钮,就生成了一个 StrCom组件对象.
7
Visual C++
与COM有关的概念(3) COM有关的概念
3.类与类工厂
类是COM接口的实现,所有的COM对象都是COM类 的实例.一个COM类也是用一个GUID来标识,在类中 称它为"类标识符"(CLSID:Class Identifier).每个 类也有一个字符串名称,叫做"编程标识符".
本节目录
COM概述 COM与软件复用 与COM有关的概念 ATL简介
3
Visual C++
COM概述 15.1.1 COM概述
COM是组件对象模型,在Windows 操作系统下COM组件很多,组件是C++ 面向对象思想在软件业的应用,它是一 种创建二进制软件组件的体系,是一种 与平台无关,语言无关,分布式的面向 对象的体系.它不是一种面向对象的语 言,而是一种标准,COM描述了如何创 建对象的一个模型以及在COM对象间进 行通讯所需要的内容.因此,从功能上 讲COM更像一个协议,一个二进制级别 上组件重用的协议.
4.组件
组件就是实现了指定接口并被封装在DLL或可执行 文件中的软件模块,它能够实现由接口指定的功能,主 要用来创建COM对象的.一个组件包括该COM类和实现 该类工厂的程序代码,有时也称它为"服务器".一个 组件可以包括多个COM对象,每个COM对象可以实现多 个接口.
8
Visual C++
与COM有关的概念(4) COM有关的概念
图15.5 设置组件对象的属性图
20
Visual C++
COM组件中添加方法 15.2.3 在COM组件中添加方法
1.方法的添加 进入Workspace窗口的 ClassView面板,在IStr接口上 右击鼠标,选择Add Method 菜单项后,弹出如图15.6所示 的增加方法接口对话框,在 Method Name编辑框中输入 FirstToUpper,在Parameters 编辑框中输入"[in] BSTR InData,[out]BSTR * OutData,[out,retval]long *result"后,按OK按钮结束方 法的添加.
12
Visual C++
利用ATL创建COM组件 利用ATL创建COM组件 ATL创建COM
本节目录
15.2.1 15.2.2 15.2.3 15.2.4 15.2.5 创建ATL应用程序框架 在工程中添加ATL对象 在COM组件中添加方法 ATL中的字符串数据类型 编译IDL并注册COM组件
13
Visual C++
ATL简介 ATL简介(续)
类模板的定义方法为: template <class 类型参数> class 类名 { …… }; 类模板的具体内容与普通类没有本质的 区别,只是其员中要用到类模板的类型 参数. 【例15-1】一个类模板实例.程序的主文 件名为MyTemplate.cpp
Visual C++
ATL编写COM组件 第15章 利用ATL编写COM组件 15章 利用ATL编写COM
教学要点
本章内容主要包括COM组件与软件复用,ATL与模 板的概念,利用Access建立数据库,创建COM组件, 使用COM组件. 要求了解模板的概念,使用COM组件的方法,熟悉 与COM组件有关的概念,掌握利用ATL创建COM组件的 方法,熟练掌握在VC中调用自己创建的组件的方法和 在别的开发工具如VB中使用VC创建的COM组件的方法.
1
利用ATL编写COM组件 利用ATL编写COM组件 ATL编写COM 本章目录
15.1 15.2 15.3 COM组件与ATL
Visual C++
利用ATL创建COM组件 在VC和VB中使用COM组件 习题
2
Visual C++
15.1
15.1.1 15.1.2 15.1.3 15.1.4
COM组件与ATL COM组件与ATL 组件与