利用ATL编写COM组件课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《利用ATL编写COM组件课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 ATL 编写 COM 组件 课件
- 资源描述:
-
1、Visual C+Visual C+1利用利用ATLATL编写编写COMCOM组件组件1COM组件与ATL2利用ATL创建COM组件 3在VC和VB中使用COM组件 Visual C+Visual C+21 1COMCOM组件与组件与ATLATL目录1.1COM概述 1.2COM与软件复用 1.3与COM有关的概念1.4ATL简介 Visual C+Visual C+31.11.1 COMCOM概述概述 COM是组件对象模型,在Windows操作系统下COM组件很多,组件是C+面向对象思想在软件业的应用,它是一种创建二进制软件组件的体系,是一种与平台无关、语言无关、分布式的面向对象的体系。它不
2、是一种面向对象的语言,而是一种标准,COM描述了如何创建对象的一个模型以及在COM对象间进行通讯所需要的内容。因此,从功能上讲COM更像一个协议,一个二进制级别上组件重用的协议。 Visual C+Visual C+4 1.2 1.2 COMCOM与软件复用与软件复用 在软件开发过程中,人们提出软件的制造能否像硬件的生产一样,实现规约化的组装。答案是肯定的,利用Microsoft的COM技术编写的组件就可以达到这个目的。 软件复用避免了软件开发过程中的重复劳动的解决方案,其出发点是应用系统的开发不再采用一切“从零开始”的模式,每个COM组件有自己的属性和操作,是一个相对独立运行的实体。从软件复
3、用种类的定义看,COM技术实质上是一种模块复用的情况。采用组件开发软件就像搭积木一样容易,组件单独开发并作为软件模块使用,它具有明确的接口,客户通过这些接口调用组件所能提供的服务,将多种组件拼装起来就能构成大型的组件以至建立整个系统。Visual C+Visual C+51.31.3 与与COMCOM有关的概念有关的概念 1对象 对象代表现实中的某个实体,是类的实例。在COM中,对象也是类的实例,但是COM对象与面向对象模型的类对象有区别。COM是与软件开发语言无关、平台无关,而面向对象模型中的类对象在不同的语言下是有区别的。2接口 动态链接库DLL是通过导出一系列函数来让客户程序使用的,只有
4、知道了DLL的导出函数列表才能使用它。COM组件的载体也是一个DLL,COM组件是通过接口与客户进行通讯的,但它是一个抽象类(含有纯虚函数的类)。下面是一个接口的简单定义:Visual C+Visual C+6与与COMCOM有关的概念有关的概念(2(2) )Interface Ideposit:Iunknownvirtual HRESULT GetMoney(int *nMoney)=0;Iunknown接口很重要,其定义如下:Struct Iunknownvirtual HRESULT QueryInterface(REFID iid,void * * ppvobj)=0; /查询是否支持
5、接口virtual ULONG AddRef()=0; /引用计数加1virtual ULONG Release()=0; /引用计数减1Visual C+Visual C+7与与COMCOM有关的概念有关的概念(3 3)3类与类工厂 类是COM接口的实现,所有的COM对象都是COM类的实例。一个COM类也是用一个GUID来标识,在类中称它为“类标识符”(CLSID:Class Identifier)。每个类也有一个字符串名称,叫做“编程标识符”.4组件 组件就是实现了指定接口并被封装在DLL或可执行文件中的软件模块,它能够实现由接口指定的功能,主要用来创建COM对象的。一个组件包括该COM类
6、和实现该类工厂的程序代码,有时也称它为“服务器”。一个组件可以包括多个COM对象,每个COM对象可以实现多个接口。 Visual C+Visual C+8与与COMCOM有关的概念有关的概念(4 4) 5注册与注册表 组件编好之后,编译出来的DLL文件还必须在注册表中注册后才能被其它用户使用。因为只有这样,用户在创建COM对象时,系统才能在注册表中获取相应对象的位置,才能创建对 象 , 对 于 D L L 型 的 组 件 , 需 要 调 用RegSvr32.exe来完成,对于EXE型的组件,只要服务器运行过一次,该组件就会自动进行注册。返回 Visual C+Visual C+91.41.4
7、ATLATL简介简介 ATL(ActiveX Template Library,活动模板库)是一套C+的模板库,利用它可以很方便地建立小型的、基于COM的组件,对COM组件的开发提供了最大限度的代码自动生成以及可视化的支持。模板是ATL的核心技术。 1什么是模板 模板(Template)是基于类型参数产生类和函数的一种机制。模板在不降低类型安全的基础上,可以显著地减少代码量,增加代码的灵活性。模板包括函数模板和类模板,本节只讲类模板。 2类模板 类是对问题空间的抽象,而类模板则是对类的抽象,即更高层次上的抽象。使用类模板,可以指定操作于某个数据类型的一族类。在程序中,可以首先定义一个类模板,然
8、后通过使用不同的实参生成不同模板类的对象。Visual C+Visual C+10ATLATL简介简介(续)(续) 类模板的定义方法为: template class 类名 ; 类模板的具体内容与普通类没有本质的区别,只是其员中要用到类模板的类型参数。 【例15-1】一个类模板实例。程序的主文件名为MyTemplate.cpp。Visual C+Visual C+112 2利用利用ATLATL创建创建COMCOM组件组件本节以一个字符串处理的组件为例来阐述如何利用ATL来制作COM组件。编程的思路为:(1)在VC下创建一个ATL工程,并对工程的可选项进行设置;(2)向工程中添加ATL对象,并对
9、该对象进行一些初始配置工作;(3)根据COM组件的功能,向新的ATL对象中加入新的接口定义,包括方法和事件的定义,并实现相应的接口成员函数;(4)编译链接该工程,注册COM组件;(5)编写组件测试程序,验证组件的功能。Visual C+Visual C+12利用利用ATLATL创建创建COMCOM组件组件目录目录2.1创建ATL应用程序框架 2.2在工程中添加ATL对象 2.3在COM组件中添加方法2.4ATL中的字符串数据类型 2.5编译IDL并注册COM组件 Visual C+Visual C+132.12.1 创建创建ATLATL应用程序框架应用程序框架 1在VC开发环境下,选择File
10、|New菜单,将弹出的New对话框切换到Projects选项卡后,选择ATL COM AppWizard项,在Project name编辑框中输入MyCom工程名称,并设置好工程所在的文件夹。如图右图所示。 Visual C+Visual C+14创建创建ATLATL应用程序框架(应用程序框架(续)续) 2 单 击“OK”按钮,进入图2所示 的 选 择ATL组件类型对话框。 2 选择选择COM组件类型对话框组件类型对话框Visual C+Visual C+15创建创建ATLATL应用程序框架应用程序框架(续)(续)ATL组件类型一共有三种:第一种是DLL类型;第二种是EXE类型;第三种是Ser
11、vice类型,它也是一个典型的进程外组件。Service是Windows2000的一种应用服务,当操作系统启动的时候,该Server自动运行。 由于进程外组件的执行效率较低,我们选择DLL类型的。选择完后,按“Finish”按钮,结束ATL创建组件的向导生成步骤,最终在磁盘上生成了组件的框架代码。表1列出了该工程中的主要文件的信息。Visual C+Visual C+16表表1 AppWizard生成的生成的MyCom工程中的文工程中的文件件 return文件名文件名文件说明文件说明MyCom.cpp工程的主文件,其中有组件的接口函数和注册函数工程的主文件,其中有组件的接口函数和注册函数MyC
12、om.def工程的工程的DLL模块定义文件,它与前面讲的模块定义文件,它与前面讲的DLL库中的库中的Def文文件的含义相同件的含义相同MyCom.idl工程的接口定义语言文件,工程的接口定义语言文件,COM是靠接口定义语言来定义是靠接口定义语言来定义组件间、组件与客户间的接口定义,它是组件间、组件与客户间的接口定义,它是COM组件的入口组件的入口点点MyCom.rc工程的资源文件,与别的工程的资源文件,与别的MFC程序的资源文件类似程序的资源文件类似Resouce.h工程的资源文件的头文件,与别的工程的资源文件的头文件,与别的MFC程序的程序的resource.h类似类似Stdafx.h工程的
13、标准头文件,与别的工程的标准头文件,与别的MFC程序的程序的stdafx.h类似类似Stdafx.cpp工程的标准实现文件,与别的工程的标准实现文件,与别的MFC程序的程序的stdafx.cpp类似类似Str.rgs工程的注册脚本文件工程的注册脚本文件Visual C+Visual C+172.22.2 在工程中添加在工程中添加ATLATL对象对象 1.选择Insert|New ATL Object,弹出如图3所示的对话框,从Objects列表框中选择Simple Object项后,单击“Next”按钮继续。图图3插入一个基于插入一个基于ATL的的COM类类 前面已经创建了一个前面已经创建了一
14、个MyCom工程,接下来,使用工程,接下来,使用VC的的ATL Object Wizard工具,可以方便地往工程中添加工具,可以方便地往工程中添加ATL对象对象。Visual C+Visual C+182.22.2 在工程中添加在工程中添加ATLATL对象对象( (续续) ) 2 系 统 弹 出 一 个 A T L Object Wizard Properties对话框。在Short Name中输入Str,在COClass编辑框中输入StrCom,如图4所示。 注意在Name选项卡中,可以键入类与文件名。默认情况在,Short Name名字是其它名字的词根。可以不接收默认的名字而键入自己的名称
15、。 图4窗口中的Class是对象所实现的类的名称,CoClass为包含对象支持的一些接口的名称,Interface为对象创建的接口名字,Type为有关注册对象的描述性字符串,Prog ID为容器所使用的名字以代替对象的CLSID。 图图4 4 设置设置COMCOM类的属性类的属性Visual C+Visual C+192.22.2 在工程中添加在工程中添加ATLATL对象对象( (续续) ) 3切换到图5所示的Attribute选项卡,设置StrCom对象的属性,如组件的线程模式、接口类以及是否支持聚集等属性。我们使用系统的默认属性。单击“OK”按钮,就生成了一个StrCom组件对象。图图5
16、设置组件对象的属性图设置组件对象的属性图 Visual C+Visual C+202.32.3 在在COMCOM组件中添加方法组件中添加方法 1方法的添加 进入Workspace窗口的ClassView面板,在IStr接口上右击鼠标,选择Add Method菜单项后,弹出如图6所示的增加方法接口对话框,在Method Name编辑框中输入FirstToUpper,在Parameters编辑框中输入“in BSTR InData,outBSTR * OutData,out,retvallong *result”后,按OK按钮结束方法的添加。 图图 6 添加添加FirstToUpper方法方法Vi
17、sual C+Visual C+212.32.3 在在COMCOM组件中添加方法组件中添加方法(续)(续) 第一个参数为InData,它是具有“in”属性的字符串变量,它是输入参数,代表欲转换的字符串;第二个参数为outData,它是具有“out”属性的字符串变量,它是输出参数,代表转换完后的的字符串;第三个参数为result,它是具有“out”和“retval”属性,意思是说该参数是作为返回值来用的输出参数,其类型是指向长整型的指针变量。 此时用户在ClassView中就可以看到Istr接口中的FirstToUpper的方法。如图7所示。 图图7 Istr接口的方法接口的方法FirstToU
展开阅读全文