(Com与插件.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(Com与插件

使用COM编写插件?安富国?  COM是微软公司为了解决软件版本冲突、组件跨平台冲突等问题而设计并主推的一种组件模型,其动态连接性和语言无关性使得COM成为实现插件极好的体系平台。  COM与插件  插件结构有助于编写有良好的扩充和定制功能的应用程序。例如,你可能想做一个有三个不同版本的软件(标准版、专业版和企业版),你不必写三套不同的代码,只需建立一个单独的主程序(host application),通过挂接插件实现三个不同的版本。  另一个使用插件的好处是可以编制特定的功能模块挂接到你的主程序上面。这是近年来十分常见的一种技术,许多软件甚至操作系统或其外壳程序都有使用。例如,Win32的外壳程序资源管理器提供了大量的API和COM接口允许你编写自己的外壳扩展程序或者说外壳插件。  COM( Component Object Model),即组件对象模型,是微软公司为了解决软件版本冲突、组件跨平台冲突等问题而设计并主推的一种组件模型,它提供了编写组件的一个标准方法,其动态连接性和语言无关性使得COM成为实现插件极好的体系平台。你可以用COM建立一个包含有主程序和插件的框架,它们可能是用不同的编程语言写成(VB、Delphi、C++等等),但由于建立在COM之上,它们之间完全能够无缝地结合在一起。  下面,笔者将会一步步地制作一个建立在COM之上的插件框架。  万能浏览器  言归正传,一个插件框架包括两个部分:主程序(host)和插件(plugin)。主程序即“包含”插件的程序。主程序公布一个标准接口IHost,作为插件和主程序通信时用;同样,插件也公布一个标准接口 IPlugin,由主程序在与插件通信时调用。本文我们将要建立一个简单的程序称之为万能浏览器(universal Explorer)。这个浏览器可以用来查看任何有着层次结构的信息,如文件系统、数据库的主/从关系、组织结构图或家庭成员关系等。浏览器公布的宿主接口叫做IExplorer。  浏览器的插件模块知道如何在层次信息中浏览、导航。例如,我们可以建立一个文件系统插件来浏览我们电脑上的文件系统。每个万能浏览器的插件都要公布一个插件接口称之为IExplorable。  接口设计  我们希望每个插件都要能描述它自己并且还要有一个指向它的宿主程序的指针,定义如下:  IExplorable = interface   procedure SetExplorer(Explorer);?  // 由宿主程序调用设置IExplorable的指向宿主程序的指针   function GetDescription : string;?  // 对自身的描述  end;  对于层次结构上任何一个指定的结点(node),万能浏览器都需要能够显示它的下级结点,这就需要我们建立一种机制,可以得到一个结点的子结点的信息。举例来说,在一个文件系统里,如果C驱下面有5个文件,万能浏览器就要问插件是哪5个文件,因此需为IExplorable提供第二个接口ISubItems,其定义如下:  ISubItems = interface   function GetCount : integer;?  //返回一个指定结点的子结点数目   function GetItem (Index) : string;?  //返回每一个下级结点(索引从0开始)  end;  有了ISubItems,万能浏览器可以得到指定结点的子结点的个数和内容。这里,我们需要为IExplorable增加一个方法来返回给定结点的ISubItems,定义如下:  IExplorable = interface   procedure SetExplorer(Explorer);?   function GetDescription : string;?   function GetSubItems (Path) : ISubItems; //返回给定结点的ISubItems  end;  Path参数是指定结点的绝对路径,例如“GetSubItems (C:\)”将返回C驱的下级文件及文件夹;而“GetSubItems (C:\Level1\Level2\Level3)”则可以返回C:\Level1\Level2\Level3的下级文件及文件夹。  同样,我们还想得到任意给定结点的结点属性。简单起见,我们只对能表示为“名/值”对的信息感兴趣。比如,对于文件系统中的一个结点,会有如下的属性:属性名属性值文件类型文件(或文件夹)文件名filename.txt文件大小1234文件日期1/1/2000 12:00 am文件属性存档、只读  为了实现上面的名/值对表,我们需要再在程序中加上一个GetProperties方法:  IExplor

文档评论(0)

64348377 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档