COM的概念解析课件_第1页
COM的概念解析课件_第2页
COM的概念解析课件_第3页
COM的概念解析课件_第4页
COM的概念解析课件_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、COM 简 介第10章1 10.1.1 COM的概念 组件对象模型COM是Microsoft公司的一种技术基石,在Microsoft公司的MSDN中是这样定义的:“COM是软件组件互相通信的一种方式,它是一种二进制和网络标准,允许任意两个组件互相通信,而不管它们在什么计算机上运行(只要计算机是相连的),不管计算机运行的什么操作系统(只要该操作系统支持COM),也不管该组件机是用什么语言编写的。”2 COM是基于客户/服务器模型的,每个COM对象的工作方式类似于服务器,可接收收和处理来自客户程序的请求,并产生自动回复信息。COM对象和客户程序客户程序COM对象请求响应3通常编写程序,首先要编写源

2、代码,再将这些源代码编译成目标码。这样做会有两个不便之处:1. 如果有多个程序,而它们多数模块的功能相同,仅有部分模块功能不同,那么每个程序都要重新写源代码,重新编译。而已编写好的,功能相同的程序不能被直接使用。2. 不同语言编写的程序,由于源代码不同,因此不能互相调用,例如用VB编写的程序,不能调用其它语言编写的程序,也不能把其它语言编写的源代码直接拷贝的VB程序中。4 采用COM模型可以提高软件的重复利用率和共享程度。随着应用的发展,程序越来越大,编写程序越来越复杂,可以让一些模块更加通用,把别人编译好的软件直接“嵌入”到自己的软件中,这样使得在开发大型软件时效率大大提高。5 10.1.2

3、 COM对象的类型 COM对象是通过一系列标准接口与外部程序进行数据交换的。接口是COM对象和调用程序之间订立的协议,它指明COM对象和数据程序交换所使用的方法、属性和事件。一般来说,COM对象有两种类型接口:即标准接口和用户接口。 标准接口是Microsoft公司定义的接口,可以在编写的程序中通过标准接口访问有关的COM对象,这种接口含有或执行各种与COM有关的作业。编写人员也可以根据需要,设计自己的COM对象接口,这就是用户接口。6作业4 二、填空题4. COM对象有两种类型接口,即 和 。答案:标准接口 用户接口7 10.1.3 Activex与COM的关系 Microsoft的Acti

4、veX技术是遵循COM规程的,或者说是COM理论的具体化。因此ActiveX和COM的关系可以简单描述如下:ActiveX是建立在COM基础上的,它采用简化之后的OLE技术(对象链接与嵌入),并使OLE随时处于激活(Active)状态,以处理信息。8 10.2 ActiveX简介 10.2.1 ActiveX模型 ActiveX模型包括: ActiveX控件 ActiveX脚本 ActiveX文档 ActiveX服务器框架 ActiveX会议 Java虚拟机9 1. Activex控件 ActiveX控件是一个提供特定功能的二进制对象。程序开发人员可以把ActiveX控件添加到自己编写的程序中

5、。 ActiveX控件可以用于各种语言环境中,也可以用于Web网页中。 ActiveX控件是一种开放结构式的对象引用技术,它不是某个特定对象的语言产物,编程人员可以通过VB(企业版)、Visual C+、Borland C+以及Delphi等多种语言来建立ActiveX控件10 2. ActiveX脚本处理 ActiveX脚本处理在诸如VBScript、JavaScript这样的脚本语言中配合使用ActiveX控件的处理过程。通过使用脚本语言,可以使程序更具交互能力。11 3. ActiveX文档 ActiveX文档是一种ActiveX表示法的非HTML文档。如同Word,Excel建立的Mi

6、crosoft Office文档一样,通过使用ActiveX文档,可以将一个Microsoft Office文档加入一个Web应用程序中,然后通过制定的浏览器来使用。12 10.2.2 ActiveX控件 1. ActiveX控件 VB中的控件分两种,即内部控件(标准控件)和ActiveX控件。 ActiveX控件是扩展名为.Ocx的控件,通常存放在Windows的System目录下。可以通过VB集成环境的“工程部件”菜单添加到工具箱中,或从工具箱取消。内部控件是VB工具箱中“常驻”控件,始终出现在工具箱中。 13把所需的ActiveX控件加到工具箱中的步骤:(1)执行“工程”菜单中的“部件”

7、命令,显示“部件”对话框;(2)在该对话框中选择“控件”选项卡,显示ActiveX控件的列表;(3)在列表框中找到需要添加的控件名称;(4)单击控件名称左侧的复选框;(5)重复上述步骤,选择其它需要加到工具箱中的控件;(6)单击“确定”按钮。142.可插入对象可插入对象也是一种ActiveX控件,只是插入的对象本身就是一个应用程序。执行“工程”菜单中的“部件”命令,打开“部件”对话框。然后选择“可插入对象”选项卡。(演示)由于可插入对象也是一种ActiveX控件,因此也可以把它们加的工具箱中,并像使用普通控件一样使用工具箱中的可插入对象。15可插入对象的使用方法例:在VB中使用Microsof

8、t Word可插入对象(1)首先新建一个工程,工程类型选择“标准EXE”;(2)在VB工具箱中加入“Microsoft Word文档”;(3)单击工具箱中的Word图标,然后在窗体上画一个框,该框中将显示Word的编辑窗口;(4)在此窗口中,像在Word环境下一样,输入文字,并按照自己的要求进行编辑,调整格式。(5)完成文档的编辑后,单击窗体上的空白处,Word文档环境消失,所输入的文字出现在窗体上。运行程序,可以显示刚才输入的文档。(6)若要对刚才的文档进行修改,可在Word文档区单击鼠标右键,在弹出的快捷菜单中选择“编辑”命令,返回到Word文档环境。 (演示)16 10.2.3 Acti

9、veX DLL 和ActiveX EXE组件 ActiveX DLL 和 ActiveX EXE 组件就是具有ActiveX机制的动态链接库(DLL)和EXE文件,文件后缀分别是 .DLL 和 .EXE,是一种特殊的动态链接库和可执行文件。 1.ActiveX DLL组件 ActiveX DLL组件属于进程内组件,它与调用它的应用程序在同一个进程中,因而可以快速地访问对象的操作。但是进程内组件必须使用应用程序的执行线程。使用的ActiveX控件(.Ocx)也属于进程内组件。进程内调用组件的原理如下页图所示。应用程序的调用函数必须等待ActiveX DLL组件运行完成后,才能执行下一语句。17调

10、用返回ActiveX DLL 组件程序进程等待程序进程18 2.ActiveX EXE 组件 ActiveX EXE 组件属于进程外组件,它与调用它的应用程序运行在不同的进程,ActiveX EXE组件与应用程序的数据交换是通过进程间的通信来实现的。进程外组件调用的原理如下页图所示。应用程序不需要等待ActiveX EXE 组件返回,就可以立即执行下一语句。所以ActiveX EXE 组件,可以编写需要异步执行的程序。19调用返回ActiveX EXE 组件程序进程程序进程20作业4 二、填空题5. ActiveX EXE文件的后缀是 。答案:EXE21 10.3 Activex EXE 组件

11、编程 ActiveX EXE 组件是运行于进程外的组件,它可以在自己的地址空间运行。 在实际开发中,有时会遇到比较费时、占用计算机资源较多的工作,如大量的数据计算、数据库查询操作等,或者对计算机实时型要求很高的工作,如数据通信程序。在这种情况下,最好采用异步执行方法,减少主程序的等待时间,即采用ActiveX EXE 组件技术实现多进程编程。 ActiveX EXE 编程方法分两步: 1.建立ActiveX EXE 组件; 2.建立ActiveX EXE 组件应用程序。22以下了解2310.3.1 建立ActiveX EXE 组件建立ActiveX EXE 组件,必须定义类模块,并在类模块中给

12、出组件的调用接口,即类的属性、方法和事件。具体方法如下:第1步:启动VB并创建一个新的工程,在新建工程对话框中。选择“ActiveX EXE”图标,打开一个类模块窗口。第2步:选中该类模块,在属性窗口中,将类的名称设置为Countcls,Instancing属性保存默认设置5MultiUse。(右图)第3步:保存工程和类模块。第4步:根据需要编写类模块代码。24类模块一般是作为单独文件保存的。它的扩展名为 .cls。在类模块编写代码时,与普通标准模块程序编写方法基本相同。不同之处是:(1)Initialize和Terminate事件。类模块中存在两个事件:Initialize和Terminat

13、e事件。 Initialize事件执行类的初始化操作,可以在这个事件函数中对类的属性值以及一些变量赋初值。Terminate事件执行类的终止操作,例如释放一些变量等。25(2)类属性过程类属性过程比较复杂,编程比较麻烦,但是VB提供了一个外接程序,即类生成器实用工具,可以借助该工具编写类模块的接口程序。例如,我们可在CountPrj工程中编写以下Fuction过程,实现两个整数的求和运算:Function Plus(x As Integer,y As Integer)As Integer Plus = x + yEnd Function26第5步:在“工程”菜单中选择“工程属性”,打开“工程属

14、性”对话框,将工程名称设置为CountPrj,其它选项设置为默认值。第6步:保存工程并编译生成EXE文件。由于该工程是一个ActiveX组件工程,所以它虽然是一个EXE文件,但是不能独立运行,只能在其它新建的程序中调用该组件。2710.3.2 ActiveX EXE 组件应用程序ActiveX EXE组件需要通过应用程序来调用。在组件中创建了若干类。为了调用这些类,必须建立类的实例。在应用程序中建立ActiveX EXE组件的引用实例的步骤:第1步:启动VB创建一个新工程,在“新建工程”对话框中选择“标准EXE”,单击“确定”按钮。第2步;选择“工程”菜单中的“引用”项,打开“引用”对话框,在

15、可引用列表框中,选择需要引用的ActiveX EXE程序,然后单击“确定”按钮。2829第3步:创建类的对象若要使用某个类,只有创建类的对象后,才能使用类的一些方法,其语法格式如下: Dim As 声明对象类型 Set = New 创建对象 也可以用以下语法格式声明并创建对象: Dim As New 例如,为了使用上面类中的Plus过程,需要编写代码如下: Private Sub Command1_Klick( ) Dim MyCls As New CountCls Text1.Text=MyCls.Plus(10,10) End Sub 30第4步:当我们不需要对象时,应该释放此对象,免得它

16、一直占用资源。释放对象的语法是: Set = Nothing执行这条语句后,该对象就释放掉了,不再占用内存资源。3110.4 ActiveX DLL 组件编程ActiveX DLL组件的建立与使用方法与ActiveX EXE 组件是类似的。组件和使用ActiveX DLL 组件的一般实现操作步骤是:(1)用VB设计组件所需要的窗体;(2)设计类的接口,定义类的属性、方法及事件;(3)编译为动套链接库(DLL),并对编译好的组件进行调试;(4)建立应用程序工程,在应用程序中引用组件对象。 32 10.4.1 建立DLL 组件 要建立ActiveX DLL组件可按如下步骤操作:1. 新建一个工程,

17、在“新建工程”对话框中选择“Activex DLL”图标,VB将自动在工程中添加一个类模块Class1。2. 根据需要,在工程中添加组件的界面窗体,并设计该界面。3. 对类模块编程。可以借助VB的类生成器实用根据编写类的属性、事件和方法。3310.4.2 编写ActiveX DLL组件应用程序建立ActiveX DLL组件应用程序需要新建一个VB工程,工程类型为“标准EXE”。然后按下面步骤编写应用程序:1. 打开“工程”菜单,选择“引用”,在引用的列表框中现在前面建立的ActiveX DLL文件;2. 设计应用程序界面的代码,在代码中,要创建ActiveX DLL中类的对象,并编写相应的事件

18、程序。最后运行程序完成程序设计工作。34 10.5 ActiveX 控件(OCX控件)编程 10.5.1 用ActiveX控件接口向导建立ActiveX控件 VB提供了ActiveX控件创建向导程序:ActiveX控件接口向导。可通过VB集成开发环境的“外接程序”菜单加载并运行该程序。借助它可以方便地创建ActiveX控件接口。 当然,在使用ActiveX控件接口向导之前,一定要对创建的控件进行设计,确认需要哪些属性和方法,提供哪些事件。35实例:使用ActiveX接口向导建立ActiveX控件的方法步骤:第1步:启动VB并新建一个工程,工程类型选择“ActiveX控件”。VB自动把一个名为U

19、serControl(用户控件)的设计器添加到工程中,该设计器实际上相当于一个窗体,因此也称用户控件窗体。3637第2步:在用户控件设计器窗体上,根据需要设计自己的界面。第3步:在“外接程序”菜单中选择“外接程序管理器”。在出现的“外接程序管理器”对话框后,在此对话框中选择“VB 6 ActiveX控件接口向导”,并且选择“加载/卸载”复选框,然后单击“确定”按钮。3839第4步:选择“外接程序”菜单中的“ActiveX控件接口向导”,将出现下页所示的对话框。4041第5步:单击“下一步”按钮,显示“选定接口成员”对话框,对话框中标准属性、事件和方法基本不用作太多的选择,使用,默认的参数就可以

20、了。对话框如下页图所示。4243第6步:单击“下一步”按钮,显示“创建自定义接口成员”对话框。如下页图所示。可以在该对话框中建立用户控件所需要的属性。4445第7步:单击“新建”按钮,打开“添加自定义成员”对话框,在该对话框中输入属性名称,并且选择“”类型“,如下页图所示。然后单击”确定“按钮,返回”创建自定义接口成员“对话框。4647第8步:单击“下一步”,显示“设计映射”对话框,如下页图所示。利用这个对话框可以将新增加的属性映射到相应的控件。本例中不作任何映射。4849第9 步:单击“下一步”按钮,显示“设置属性”对话框,如下页图所示。我们将MyCaption属性的数据类型设置为Strin

21、g,缺省值设置为“你好”。5051第10步:单击“下一步”按钮后,显示“完成”对话框。第11步:通过“工程属性”菜单修改工程名称,保存该工程并编译生成 .ocx 文件。5210.5.2 利用用户控件编写应用程序为了使用上面创建的ActiveX控件,需要按下面步骤编写程序:第1步:新建一个VB工程,类型为“标准EXE”。第2步:在“工程”菜单中选择“部件”对话框,将前面建好的Activex控件加到工具箱。第3步:从工具箱中将用户控件加到窗体。至此,我们就可以象使用其它控件一样,使用自定义的用户控件了。53实验10 Activex的简单应用一、 ActiveX EXE 组件编程1. 实验要求对于循

22、环计数程序在普通的VB中就可以计算完成,但是对于循环次数特别大的程序,程序若放在主模块中,则会占用较多的CPU资源,在计算过程中,会出现窗口没有反应的假死机情况。若采用ActiveX EXE编程计数,则可避免出现这种情况。本实验按顺序使用普通方法、改进后的普通方法和ActiveX EXE三种方法编写一个从1到1000三重计数的程序,理解这种计数的作用和开发方法。54一、 ActiveX EXE 组件编程2. 实验步骤普通方法用普通的方法编写一个从11000三重循环计数程序。方法如下:1)新建一个VB标准EXE工程。2)在Form1中加入一个Timer控件、两个Label和两个文本框。将Time

23、r控件的Interval属性设置为600。553)编写控件的Timer事件的程序Private Sub Timer1_Timer() Text1.Text = Format(Now(), hh:mm:ss)End Sub4)编写三重循环计数程序Public Function countLoop() As Long Dim i As Long Dim j As Long Dim k As Long Dim g As Long k = 0 For i = 1 To 1000 For j = 1 To 1000 For k = 1 To 1000 g = g + 1 Next k Next j Ne

24、xt i countLoop = g End Function565)编写“计算”按钮Command1_Click程序 Private Sub Command1_Click() Text2.Text = countLoop() End Sub6)执行程序57 按程序设计逻辑,当单击“计算”按钮后,将调用循环计数函数countLoop,并且在文本框Text2中显示循环次数。但实际单击后,却发现时钟不显示了,整个程序好象出现了死机现象。此时千万不要关机或重新启动,因为这是一种假死机现象,是循环计数函数正在运行的原因,此时可按Ctrl+Break键中断程序的运行。当进行1至1000的三重计数循环,循

25、环此数为109次,这时将占用大量的CPU资源,造成上述现象。58方法二:普通方法改进后的程序普通编程方法因循环计数函数占用过多的资源,所以需要改进。若在循环计数的函数中加入 DoEvents 语句,暂时中断当前的程序,把控制权交给Windows系统,就可避免出现假死机现象。下面是改进后的循环计数函数:Public Function countLoop() As Long Dim i As Long Dim j As Long Dim k As Long Dim g As Long k = 0 For i = 1 To 1000 For j = 1 To 1000 For k = 1 To 10

26、00 g = g + 1 DoEvents 暂时中断程序,将控制权交给Windows系统 Next k Next j Next i countLoop = g End Function59方法三:建立ActiveX EXE 组件技术方法除采用DoEvents语句实现多任务的工作,还有一种方法,就是ActiveX EXE 组件技术。这种方法需分两步进行:第一步:建立ActiveX EXE 组件;第二步,编写Activex应用程序。第1步:建立ActiveX EXE 组件采用ActiveX EXE 可以编写出多任务程序,将占用系统资源较多的程序放到后台执行,以提高程序的效率。对于前面的三重循环计数程序,采用ActiveX EXE 组件编写的程序如下:60方法三:建立ActiveX EXE 组件技术方法1)启动VB,创建一个新的工程,在新建工程对话框中,选择“ActiveX EXE”图标,VB将打开一个类模块窗口。61方法三:建立ActiveX EXE 组件技术方法2)选中该类模块窗口,在属性窗口中,将类模块的名称改为CountCls(原来为Class1)。62方法三:建立ActiveX EXE 组件技术方法3)在工程资源管理器窗口中,单击“工程1(工程1)”,然后打开属性窗口,把名称属性改为Cou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论