1、1,基于VB的桌面系统开发方案,5,组件对象模型,2,课题目标,理解并能解释为什么需要COM 解释OLE 和COM的关系 COM的优点 解释不同OLE 服务器类型间的区别掌握OLE 控件的使用 掌握类型库的使用,3,回顾,在Visual Basic程序中处理错误发生在Visual Basic程序中的三种错误类型 : 运行、语法和逻辑错误错误处理技术 立即和延迟错误处理属性、方法和事件用于生成一个类模块中的类,4,介绍,组件对象模型 (COM)由微软定义的一个标准允许我们通过使用其它厂商的软件功能来扩展自己的软件功能,5,问题的出现,Microsoft Word字处理器软件 Microsoft
2、Excel电子表单 Microsoft PowerPoint 制作演示稿的软件CorelDraw 绘制繁复图形,6,问题的出现(续),有很多时候我们发现在一个应用程序中需要用到这个应用程序没有的功能,7,问题的出现(续),要绘制一张图表: 确定Y轴的精确比例。 用X轴来代表月份。 保证每个柱体之间的差别是可区别的。 缺点:如果数据发生了改变,就需要重新绘制图表。 在一个文件中可能对同一数据的一个图表采用不同的风格或者使用不同的图表来表示。,8,问题的出现(续),解决问题的方法 :在另外一个专门绘制图表的应用程序中产生需要的图表。打印出该图表 在需要时把打印出的图表粘贴到打印好的文件上 缺点:我
3、们要使用两种不同的软件,最后还要保证两种文件最后正确的和为一体图表对应的数据的任何改变都要求重新修改图表并相应地调整文件以保证新绘的图表能正确地粘贴到文件上,9,问题的出现(续),Word, Excel, PowerPoint和Access都需要提供图表绘制功能给每一个软件都加入图表绘制能力并不是一个好主意,因为: 所有的四个软件都是微软产品 重复的功能就意味着重复的代码。浪费硬盘空间 如果微软开发新的需要这个功能的软件,还需要在这个新的软件中加入这些代码,10,解决办法,把许多应用程序都共有的功能独立出来,创建一个新的应用程序来实现在需要某个功能而应用程序没有提供时,只需要调用提供那个功能的
4、应用程序就可以了可以实现上述解决方案的标准,称为组件对象模型(COM),11,组件对象模型,定义了一些规则,要求应用程序与其它应用程序之间按照一个统一的行为进行交互调用其它应用程序的应用程序和被调用的应用程序都必须遵循COM中的规则指定的规则具有普遍性而不是特殊的 它是一个开放的,可扩展的软件互操作标准可以让我们象使用自己应用程序的功能一样使用别的程序实现相应功能,12,对象的连接和嵌入,对一个调用其它应用程序的程序来说,这个调用者需要知道被调用的应用程序的位置组件对象模型(COM )要求可以为其它应用程序提供服务的应用程序都要在一个地方进行注册 是一个蓝皮书或者说是一个指导性的规则是理论上的
5、,而不是一个实现了的东西,13,对象的连接和嵌入(续),对象连接和嵌入 (OLE)就是COM的一个实现OLE中就对此进行了实现,在Windows环境中用来进行注册的地方就是Windows注册表,14,创建一个新文档,15,激活Microsoft Graph,16,对象对话框,17,Microsoft Graph,18,菜单项 Word文档,19,数据表单,20,选中图表类型子菜单,21,图表类型对话框,22,恢复后的Word界面,23,编辑图表,24,需要注意的几点,Microsoft Word是调用者,同时也是客户端Microsoft Graph是服务器端或者称为对象应用程序Microsof
6、t Graph 创建的图表在Word 文档中称为对象想要修改图表还需要使用Microsoft Graph,25,注册一个服务器程序,文件system.dat所有运行Windows操作系统的计算机中都存在是Windows注册表在安装一个服务器端应用程序时,它会在注册表中写入它的名称和位置对客户端应用程序来说,需要做的就是读取注册表并查看哪些服务器端应用程序可以供给它使用只有服务器端应用程序需要注册服务器端程序在它们被客户端程序调用之前都必须向注册表注册,26,关于对象,嵌入式对象Microsoft Graph在Word文档中创建的图表和文档保存在一起连接对象和文档分离开单独存储的对象文档中只保存
7、对象的一个引用,对象本身被存储在一个单独的文件中对象可以独立于文档进行操作。下次打开包含有指向这个对象引用的文档时,对象的修改也相应的反映到文档中,27,连接和嵌入的对比,嵌入方式创建的文件比较大,因为它包含有对象的拷贝连接方式创建的文件比较小连接方式常用于对象要跟随创建它的数据的变化而变化的情况,28,COM的优点,可以节省开发时间提供了软件的重用让我们在所有可获取的软件中选取最好的来使用,29,COM服务器端的类型,简单服务器端程序只能被客户端程序激活,但是不能让客户端程序访问它自定义的变量和方法 自动服务器端程序允许客户端程序访问对象的某些方法和属性ActiveX微软给可由客户端编程的组
8、件取的名字自动服务器端程序可以让用户通过可访问的方法和属性对服务器端对象进行操作,但是它不能让我们在对象发生某一特定的事件时编写程序进行处理ActiveX是一个用户界面组件如按钮、列标框等,它拥有客户端程序可以访问的方法、属性和事件,30,类型库,问题:对自动服务器端程序和ActiveX组件,客户端程序需要知道哪些方法、属性和事件是可以访问的解决:类型库类型库的位置在服务器端程序注册时就和其它信息一起写入到注册表中客户端程序读取注册表,获取到类型库的位置然后读取类型库来决定对象可访问的属性、方法和事件,31,OLE控件,在程序中使用连接或嵌入对象,OLE Control,32,使用OLE控件,
9、33,插入对象对话框,显示注册过的对象。,34,插入对象,属性“Class”保存一个标识着和OLE控件相关的对象类型的字符串,35,运行状态下的应用程序,36,服务器端程序的菜单,37,OLE控件的方法,Close关闭存在的活动的服务器端程序关闭服务器端程序是客户端程序的责任 OLE1.Close()CreateEmbed从一个指定的文件创建一个嵌入式对象并把它和OLE 相连优点允许在应用程序中嵌入一个已存在的文件例如:OLE1.CreateEmbed (c:try.doc),38,OLE控件的方法(续),CreateLink从指定文件创建一个链接对象并把它和一个OLE控件联系起来优点允许在应
10、用程序中链接一个已存在的文件例如:OLE1.CreateLink(c:try.doc),39,OLE控件的方法(续),InsertObjDlg用来显示“插入对象”对话框,使我们可以选择要创建对象的类型单击对话框的“确定”按钮时,创建选中类型的对象并和OLE控件联系在一起可以让我们在任何时候使用注册的服务器端程序,40,OLE控件的方法(续),在每次显示时读取注册表中的信息来获取服务器端程序列表并显示到对话框中,这样一旦有新的服务器端程序注册,就可以在列表中显示出来OLE1.InsertObjDlg,41,OLE控件的属性,AutoActivate决定如何激活服务器端程序可选的值是双击、获得焦点
11、、自动或是人工激活Class设置或决定对象的类的名称或是对象的类型和Word 文档相关联的“OLE1”控件的class 属性值为:“Word.Document.8”Object返回在OLE 控件中支持的OLE 对象的引用,42,OLE控件的事件,ObjectMove在对象被移动时触发Update在对象的数据发生改变时触发当服务器端对象是活动的,并且用户对它进行了修改时发生,43,本课总结,组件对象模型(COM)是由微软定义的一个标准,它允许我们通过使用其它软件来扩展自己软件的功能OLE是一种解决方案,允许我们在自己的程序中使用其它程序嵌入对象是容器的一部分链接容器中包含一个到对象的链接,对象自己独立存在,44,本课总结(续),不同类型的服务器应用程序简单服务器只能被客户端程序激活,但是不能让客户端程序访问它自定义的变量和方法自动服务器应用程序允许客户端程序访问对象的某些方法和属性ActiveX是微软赋给可由客户端编程的组件名字,为了让组件能够处理事件,所以引入了ActiveX,