1 / 65

COM 简 介

COM 简 介. 新教材 第 10 章. 10.1.1 COM 的概念 组件对象模型 COM 是 Microsoft 公司的一种技术基石,在 Microsoft 公司的 MSDN 中是这样定义的:“ COM 是软件组件互相通信的一种方式,它是一种二进制和网络标准,允许任意两个组件互相通信,而不管它们在什么计算机上运行(只要计算机是相连的),不管计算机运行的什么操作系统(只要该操作系统支持 COM ),也不管该组件机是用什么语言编写的。”. 客户程序. COM 对象. 请求. 响应.

Télécharger la présentation

COM 简 介

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. COM 简 介 新教材 第10章

  2. 10.1.1 COM的概念 组件对象模型COM是Microsoft公司的一种技术基石,在Microsoft公司的MSDN中是这样定义的:“COM是软件组件互相通信的一种方式,它是一种二进制和网络标准,允许任意两个组件互相通信,而不管它们在什么计算机上运行(只要计算机是相连的),不管计算机运行的什么操作系统(只要该操作系统支持COM),也不管该组件机是用什么语言编写的。”

  3. 客户程序 COM对象 请求 响应 COM是基于客户/服务器模型的,每个COM对象的工作方式类似于服务器,可接收收和处理来自客户程序的请求,并产生自动回复信息。 COM对象和客户程序

  4. 通常编写程序,首先要编写源代码,再将这些源代码编译成目标码。这样做会有两个不便之处:通常编写程序,首先要编写源代码,再将这些源代码编译成目标码。这样做会有两个不便之处: 1. 如果有多个程序,而它们多数模块的功能相同,仅有部分模块功能不同,那么每个程序都要重新写源代码,重新编译。而已编写好的,功能相同的程序不能被直接使用。 2. 不同语言编写的程序,由于源代码不同,因此不能互相调用,例如用VB编写的程序,不能调用其它语言编写的程序,也不能把其它语言编写的源代码直接拷贝的VB程序中。

  5. 采用COM模型可以提高软件的重复利用率和共享程度。随着应用的发展,程序越来越大,编写程序越来越复杂,可以让一些模块更加通用,把别人编译好的软件直接“嵌入”到自己的软件中,这样使得在开发大型软件时效率大大提高。采用COM模型可以提高软件的重复利用率和共享程度。随着应用的发展,程序越来越大,编写程序越来越复杂,可以让一些模块更加通用,把别人编译好的软件直接“嵌入”到自己的软件中,这样使得在开发大型软件时效率大大提高。

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

  7. 10.1.3 Activex与COM的关系 Microsoft的ActiveX技术是遵循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控件添加到自己编写的程序中。 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建立的Microsoft Office文档一样,通过使用ActiveX文档,可以将一个Microsoft Office文档加入一个Web应用程序中,然后通过制定的浏览器来使用。

  12. 10.2.2 ActiveX控件 1. ActiveX控件 VB中的控件分两种,即内部控件(标准控件)和ActiveX控件。 ActiveX控件是扩展名为.Ocx的控件,通常存放在Windows的System目录下。可以通过VB集成环境的“工程—部件”菜单添加到工具箱中,或从工具箱取消。内部控件是VB工具箱中“常驻”控件,始终出现在工具箱中。

  13. 把所需的ActiveX控件加到工具箱中的步骤: (1)执行“工程”菜单中的“部件”命令,显示“部件”对话框; (2)在该对话框中选择“控件”选项卡,显示ActiveX控件的列表; (3)在列表框中找到需要添加的控件名称; (4)单击控件名称左侧的复选框; (5)重复上述步骤,选择其它需要加到工具箱中的控件; (6)单击“确定”按钮。 (演示)

  14. 2.可插入对象 可插入对象也是一种ActiveX控件,只是插入的对象本身就是一个应用程序。执行“工程”菜单中的“部件”命令,打开“部件”对话框。然后选择“可插入对象”选项卡。(演示) 由于可插入对象也是一种ActiveX控件,因此也可以把它们加的工具箱中,并像使用普通控件一样使用工具箱中的可插入对象。(演示)

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

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

  17. 序 进 程 调用 等 待 ActiveX DLL 组件 返回 程 序 进 程

  18. 2.ActiveX EXE 组件 ActiveX EXE 组件属于进程外组件,它与调用它的应用程序运行在不同的进程,ActiveX DLL组件与应用程序的数据交换是通过进程间的通信来实现的。进程外组件调用的原理如下页图所示。应用程序不需要等待ActiveX EXE 组件返回,就可以立即执行下一语句。所以ActiveX EXE 组件,可以编写需要异步执行的程序。

  19. 序 进 程 调用 ActiveX EXE 组件 返回 程 序 进 程

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

  21. 10.3.1 建立ActiveX EXE 组件 建立ActiveX EXE 组件,必须定义类模块,并在类模块中给出组件的调用接口,即类的属性、方法和事件。具体方法如下: 第1步:启动VB并创建一个新的 工程,在新建工程对话框中。 选择“ActiveX EXE”图标,打开 一个类模块窗口。 第2步:选中该类模块,在属性 窗口中,将类的名称设置为 Countcls,Instancing属性保存 默认设置5—MultiUse。(右图) 第3步:保存工程和类模块。 第4步:根据需要编写类模块代码。

  22. 类模块一般是作为单独文件保存的。它的扩展名为 .cls。在类模块编写代码时,与普通标准模块程序编写方法基本相同。不同之处是: (1)Initialize和Terminate事件。 类模块中存在两个事件:Initialize和Terminate事件。 Initialize事件执行类的初始化操作,可以在这个事件函数中对类的属性值以及一些变量赋初值。Terminate事件执行类的终止操作,例如释放一些变量等。

  23. (2)类属性过程 类属性过程比较复杂,编程比较麻烦,但是VB提供了一个外接程序,即类生成器实用工具,可以借助该工具编写类模块的接口程序。 例如,我们可在CountPrj工程中编写以下Fuction过程,实现两个整数的求和运算: Function Plus(x As Integer,y As Integer)As Integer Plus = x + y End Function

  24. 第5步:在“工程”菜单中选择“工程属性”,打开“工程属性”对话框,将工程名称设置为CountPrj,其它选项设置为默认值。第5步:在“工程”菜单中选择“工程属性”,打开“工程属性”对话框,将工程名称设置为CountPrj,其它选项设置为默认值。 第6步:保存工程并编译生成EXE文件。由于该工程是一个ActiveX组件工程,所以它虽然是一个EXE文件,但是不能独立运行,只能在其它新建的程序中调用该组件。

  25. 10.3.2 ActiveX EXE 组件应用程序 ActiveX EXE组件需要通过应用程序来调用。在组件中创建了若干类。为了调用这些类,必须建立类的实例。 在应用程序中建立ActiveX EXE组件的引用实例的步骤: 第1步:启动VB创建一个新工程,在“新建工程”对话框中选择“标准EXE”,单击“确定”按钮。 第2步;选择“工程”菜单中的“引用”项,打开“引用”对话框,在可引用列表框中,选择需要引用的ActiveX EXE程序,然后单击“确定”按钮。

  26. 第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

  27. 第4步:当我们不需要对象时,应该释放此对象,免得它一直占用资源。释放对象的语法是:第4步:当我们不需要对象时,应该释放此对象,免得它一直占用资源。释放对象的语法是: Set <对象名> = Nothing 执行这条语句后,该对象就释放掉了,不再占用内存资源。

  28. 实验10 Activex的简单应用 一、 ActiveX EXE 组件编程 1. 实验要求 对于循环计数程序在普通的VB中就可以计算完成,但是对于循环次数特别大的程序,程序若放在主模块中,则会占用较多的CPU资源,在计算过程中,会出现窗口没有反应的假死机情况。若采用ActiveX EXE编程计数,则可避免出现这种情况。 本实验按顺序使用普通方法、改进后的普通方法和ActiveX EXE三种方法编写一个从1到1000三重计数的程序,理解这种计数的作用和开发方法。

  29. 一、 ActiveX EXE 组件编程 2. 实验步骤——普通方法 用普通的方法编写一个从1~1000三重循环计数程序。方法如下: 1)新建一个VB标准EXE工程。 2)在Form1中加入一个Timer控件、两个Label和两个文本框。将Timer控件的Interval属性设置为600。

  30. 3)编写控件的Timer事件的程序 Private Sub Timer1_Timer() Text1.Text = Format(Now(), "hh:mm:ss") End Sub 4)编写三重循环计数程序 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 Next i countLoop = g End Function

  31. 5)编写“计算”按钮Command1_Click程序 Private Sub Command1_Click() Text2.Text = countLoop() End Sub 6)执行程序

  32. 按程序设计逻辑,当单击“计算”按钮后,将调用循环计数函数countLoop,并且在文本框Text2中显示循环次数。但实际单击后,却发现时钟不显示了,整个程序好象出现了死机现象。此时千万不要关机或重新启动,因为这是一种假死机现象,是循环计数函数正在运行的原因,此时可按Ctrl+Break键中断程序的运行。当进行1至1000的三重计数循环,循环此数为109次,这时将占用大量的CPU资源,造成上述现象。按程序设计逻辑,当单击“计算”按钮后,将调用循环计数函数countLoop,并且在文本框Text2中显示循环次数。但实际单击后,却发现时钟不显示了,整个程序好象出现了死机现象。此时千万不要关机或重新启动,因为这是一种假死机现象,是循环计数函数正在运行的原因,此时可按Ctrl+Break键中断程序的运行。当进行1至1000的三重计数循环,循环此数为109次,这时将占用大量的CPU资源,造成上述现象。

  33. 方法二:普通方法改进后的程序 普通编程方法因循环计数函数占用过多的资源,所以需要改进。若在循环计数的函数中加入 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 1000 g = g + 1 DoEvents '暂时中断程序,将控制权交给Windows系统 Next k Next j Next i countLoop = g End Function

  34. 方法三:建立ActiveX EXE 组件技术方法 除采用DoEvents语句实现多任务的工作,还有一种方法,就是ActiveX EXE 组件技术。这种方法需分两步进行:第一步:建立ActiveX EXE 组件;第二步,编写Activex应用程序。 第1步:建立ActiveX EXE 组件 采用ActiveX EXE 可以编写出多任务程序,将占用系统资源较多的程序放到后台执行,以提高程序的效率。对于前面的三重循环计数程序,采用ActiveX EXE 组件编写的程序如下:

  35. 方法三:建立ActiveX EXE 组件技术方法 1)启动VB,创建一个新的工程,在新建工程对话框中,选择“ActiveX EXE”图标,VB将打开一个类模块窗口。

  36. 方法三:建立ActiveX EXE 组件技术方法 2)选中该类模块窗口,在属性窗口中,将类模块的名称改为CountCls(原来为Class1)。

  37. 方法三:建立ActiveX EXE 组件技术方法 3)在工程资源管理器窗口中,单击“工程1(工程1)”,然后打开属性窗口,把名称属性改为CountProj. 4)保存工程和类模块,文件名为ActivexCount.vbp和ClassCuont.Cls。此时工程资源管理器如图所示。

  38. 方法三:建立ActiveX EXE 组件技术方法 6)选择菜单“文件”中的 “生成CountProj.exe”, 生成EXE文件。由于 CountProj.exe是一个 ActiveX组件,所以它虽 然是一个EXE文件,但它 不能独立运行,只能在其 他新建程序中调用该组件。 5)打开类模块窗口,编写代码。 Public Function Calcount() As Long Dim i As Integer Dim j As Integer Dim k As Integer Dim g As Long Calcount = 0 For i = 0 To 1000 For j = 0 To 1000 For k = 0 To 1000 g = g + 1 Next k Next j Next i Calcount = g End Function

  39. 方法三:建立ActiveX EXE 组件技术方法 第2步:使用Activex EXE组件 1)启动VB,建立一个新的工程,在“新建工程”对话框中选择“标准EXE”,然后单击“确定”按钮。 2)选择“工程”菜单的“引用”项,打开引用对话框,在“可用的引用”列表框中,选择“CountProj”,然后单击“确定”按钮。

  40. 方法三:建立ActiveX EXE 组件技术方法 第2步:使用Activex EXE组件 3)设置界面并设置属性(同方法1)。 4)为“计算”命令按钮(Command1)编写程序: Private Sub Command1_Click() Dim LargeCount As CountCls Dim Result As Long Text2.Text = "" Set LargeCount = New CountCls Result = LargeCount.Calcount Text1.Text = Result End Sub 5)编写时间控件Timer1的程序(同方法1) 6)运行程序,观察一下效果。

  41. 10.4 ActiveX DLL 组件编程 ActiveX DLL组件的建立与使用方法与ActiveX EXE 组件是类似的。组件和使用ActiveX DLL 组件的一般实现操作步骤是: (1)用VB设计组件所需要的窗体; (2)设计类的接口,定义类的属性、方法及事件; (3)编译为动套链接库(DLL),并对编译好的组件进行调试; (4)建立应用程序工程,在应用程序中引用组件对象。

  42. 10.4.1 建立DLL 组件 要建立ActiveX DLL组件可按如下步骤操作: 1. 新建一个工程,在“新建工程”对话框中选择“Activex DLL”图标,VB将自动在工程中添加一个类模块Class1。 2. 根据需要,在工程中添加组件的界面窗体,并设计该界面。 3. 对类模块编程。可以借助VB的类生成器实用根据编写类的属性、事件和方法。

  43. 10.4.2 编写ActiveX DLL组件应用程序 建立ActiveX DLL组件应用程序需要新建一个VB工程,工程类型为“标准EXE”。然后按下面步骤编写应用程序: 1. 打开“工程”菜单,选择“引用”,在引用的列表框中现在前面建立的ActiveX DLL文件; 2. 设计应用程序界面的代码,在代码中,要创建ActiveX DLL中类的对象,并编写相应的事件程序。 最后运行程序完成程序设计工作。

  44. 实验10 二、ActiveX DLL组件编程 1. 实验要求 建立一个ActiveX DLL动态链接库,设计一个DrawGame类,这个类提供一种数字抽奖服务,即由用户来碰运气,进行数字抽奖,将抽出的数字与幸运号码比较,若数字相同则中奖。

  45. 实验10 二、ActiveX DLL组件编程 2. 实验步骤 (1)开发ActiveX DLL组件 1)新建一个VB工程,在“新建工程”对话框中选择“ActiveX DLL”图标,然后单击“确定”按钮,将自动在工程中添加一个类模块Class1.

  46. 10.5 ActiveX 控件(OCX控件)编程 10.5.1 用ActiveX控件接口向导建立ActiveX控件 VB提供了ActiveX控件创建向导程序:ActiveX控件接口向导。可通过VB集成开发环境的“外接程序”菜单加载并运行该程序。借助它可以方便地创建ActiveX控件接口。 当然,在使用ActiveX控件接口向导之前,一定要对创建的控件进行设计,确认需要哪些属性和方法,提供哪些事件。

  47. 实例:使用ActiveX接口向导建立ActiveX控件的方法步骤:实例:使用ActiveX接口向导建立ActiveX控件的方法步骤: 第1步:启动VB并新建一个工程,工程类型选择“ActiveX控件”。 VB自动把一个名为UserControl(用户控件)的设计器添加到工程中,该设计器实际上相当于一个窗体,因此也称用户控件窗体。

  48. 第2步:在用户控件设计器窗体上,根据需要设计自己的界面。第2步:在用户控件设计器窗体上,根据需要设计自己的界面。 第3步:在“外接程序”菜单中选择“外接程序管理器”。在出现的“外接程序管理器”对话框后,在此对话框中选择“VB 6 ActiveX控件接口向导”,并且选择“加载/卸载”复选框,然后单击“确定”按钮。

More Related