• 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
    • / 15
    • 下载费用:30 金币  

    重庆时时彩票怎么买: 基于类别创建驱动构件对象实现设备驱动程序多态的方法.pdf

    关 键 词:
    基于 类别 创建 驱动 构件 对象 实现 设备 驱动程序 方法
      专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    摘要
    申请专利号:

    CN02159488.0

    申请日:

    2002.12.31

    公开号:

    CN1512323A

    公开日:

    2004.07.14

    当前法律状态:

    终止

    有效性:

    无权

    法律详情: 未缴年费专利权终止IPC(主分类):G06F 9/30申请日:20021231授权公告日:20061206终止日期:20151231|||授权|||专利申请权、专利权的转移(专利申请权的转移)变更项目:申请人变更前权利人:北京科泰世纪科技有限公司变更后权利人:上??铺┦兰涂萍加邢薰颈涓钅?地址变更前:100084北京市海淀区清华科技园创新大厦B座6层618号变更后:201203上海市浦东新区郭守敬路498号17号楼2层登记生效日:2005.5.27|||实质审查的生效|||公开
    IPC分类号: G06F9/30; G06F9/38 主分类号: G06F9/30; G06F9/38
    申请人: 北京科泰世纪科技有限公司;
    发明人: 苏翼鹏; 陈榕; 杜永文; 梁宇洲
    地址: 100084北京市海淀区清华科技园创新大厦B座6层618号
    优先权:
    专利代理机构: 北京同立钧成知识产权代理有限公司 代理人: 余丽;刘芳
    PDF完整版下载: PDF下载
    法律状态
    申请(专利)号:

    CN02159488.0

    授权公告号:

    |||1288548|||||||||

    法律状态公告日:

    2017.02.22|||2006.12.06|||2005.06.29|||2004.09.22|||2004.07.14

    法律状态类型:

    专利权的终止|||授权|||专利申请权、专利权的转移(专利申请权的转移)|||实质审查的生效|||公开

    摘要

    一种基于类别创建驱动构件对象实现设备驱动程序多态的方法,首先定义并实现驱动构件类;然后,构件客户程序使用类别的智能指针创建驱动对象。本发明使操作系统根据客户的指定,自动根据指定的构件类型选用相应的构件,进一步实现应用程序对驱动程序的多态访问。不需为每个种类的驱动实现一个伪驱动作为公用入口,而只要定义这种驱动类别的公用接口,属于这个类别的驱动都实现该公用接口;本发明只在创建驱动对象的过程中的动态绑定时才附加一些效率上的开销;一旦驱动对象创建出来,操作系统把驱动对象所实现的公共接口返回给应用程序,应用程序就可以直接调用具体驱动对象的方法,没有额外的效率开销;实现了应用程序对驱动程序的多态访问。

    权利要求书

    1: 一种基于类别创建驱动构件对象实现设备驱动程序多态的方法,其 特征在于:至少包括: 步骤1:定义并实现驱动构件类别; 步骤2:构件客户程序基于该驱动构件类别创建驱动对象。
    2: 根据权利要求1所述的基于类别创建驱动构件对象实现设备驱动程 序多态的方法,其特征在于:所述的实现方法还进一步包括:在构件类别中 设定该类别的缺省类标识(CLSID)。
    3: 根据权利要求2所述的基于类别创建驱动构件对象实现设备驱动程 序多态的方法,其特征在于:所述的构件类别中CLSID的设定方法为:对构 件类别及其所属的构件类进行注册,并将最后一个注册到构件类别中的CLSID 作为该构件类别的缺省CLSID。
    4: 根据权利要求2所述的基于类别创建驱动构件对象实现设备驱动程 序多态的方法,其特征在于:所述的构件类别中CLSID的设定方法为: 步骤31:读入系统构件类别注册文件中的类别注册信息; 步骤32:读取打包在对应的动态连接库文件资源段(Resource?Section) 中的构件元数据; 步骤33:在构件元数据中查找是否定义了新的类别,否则执行步骤35; 步骤34:把包括驱动构件类别标识的新的类别信息添加到类别注册信 息中; 步骤35:在元数据中查找是否存在属于类别注册信息中构件类别的构 件类,不存在,则执行步骤37; 步骤36:将包括驱动构件类别标识的构件类信息添加到相应的构件类 别名下,并将该构件类作为该类别的缺省构件类; 步骤37:将修改后的类别注册信息写回到系统类别注册文件中。
    5: 根据权利要求2所述的基于类别创建驱动构件对象实现设备驱动程 序多态的方法,其特征在于:所述的构件类别中CLSID的设定方法为:如果 定义构件类别的动态连接库文件中有一个以上的构件类相应的构件类别,则 使用最后一个属于该类别的构件类作为缺省类,否则返回失败信息。
    6: 根据权利要求1所述的基于类别创建驱动构件对象实现设备驱动程 序多态的方法,其特征在于:步骤1具体包括: 步骤11:通过继承定义的构件类别定义构件类; 步骤12:根据构件的功能需求实现构件类; 步骤13:编译构件程序并自动注册构件类别。
    7: 根据权利要求6所述的基于类别创建驱动构件对象实现设备驱动程 序多态的方法,其特征在于:步骤13具体包括: 步骤131:对构件程序进行编译,生成构件动态连接库文件; 步骤132:将定义的构件类别及类别所包含的构件类进行注册。
    8: 根据权利要求1或6所述的基于类别创建驱动构件对象实现设备驱 动程序多态的方法,其特征在于:在定义并实现驱动构件类之前,还包括使 用构件描述语言定义驱动的类别。
    9: 根据权利要求1或6所述的基于类别创建驱动构件对象实现设备驱 动程序多态的方法,其特征在于:所述的驱动构件类允许定义一个或一个以 上的接口。
    10: 根据权利要求1所述的基于类别创建驱动构件对象实现设备驱动程 序多态的方法,其特征在于:步骤2具体包括: 步骤21:指定要创建驱动对象的驱动构件类别标识(CATID); 步骤22:取该类别的缺省类标识CLSID; 步骤23:判断该CLSID是否属于驱动程序类别,如果是,则执行步骤24; 如果不是,则使用CLSID创建出普通的构件对象,执行步骤26; 步骤24:使用CLSID创建具体的驱动对象; 步骤25:从驱动对象查询(QueryInterface,COM规范所规定的用于从 构件对象中查询它是否支持指定的接口的一个标准方法)出类别中的公用接 口; 步骤26:返回该类别的公共接口。

    说明书


    基于类别创建驱动构件对象实现设备驱动程序多态的方法

        【技术领域】

        本发明涉及一种基于类别创建驱动构件对象实现设备驱动程序多态的方法,特别是指一种操作系统根据客户的指定,自动根据指定的构件类型选用相应的构件,进一步实现应用程序对驱动程序的多态访问的构件创建方法,属于计算机技术领域。

        背景技术

        在操作系统中,真正的硬件驱动程序总是针对某一特定的硬件设备进行I/O访问,并向上层应用提供这一特定设备的访问接口。但对于驱动程序的使用者来说:他们大多数情况下并不关心使用的是什么设备,而只关心系统上有没有这种类型的可用设备。例如:使用打印机的应用程序只关心机器上有没有打印机可以用,而不关心是使用的是并口打印机、串口打印机还是网络打印机,更不会去关心打印机的型号或品牌。因此,让使用打印机地应用程序去直接指定所要使用的打印机驱动程序的做法是不合理的。

        为了解决这一问题,传统操作系统中的做法是把驱动程序分层,参见图1,打印机驱动程序通常被分成三层:硬件I/O层3、打印驱动层2及应用接口层1。在应用接口层1,操作系统实现一个伪打印驱动程序,目的是为上层应用程序提供一个标准的打印机接口,这样应用程序就可以在不需要关心打印机的具体型号的情况下使用它。下层具体的打印驱动程序在安装时再把自己注册到虚拟打印机的伪驱动程序中,这样虚拟打印机驱动可以把上层应用的打印请求转发给具体的打印驱动程序,执行相应的打印指令。

        这种通过抽象接口(应用接口层1),根据接口引用到的实体对象(驱动程序)的不同而获取不同功能特征的特性,在面向构件(或面向对象)的技术里被称为多态。

        通过这种多态特征,可以很好地解决应用程序与具体硬件隔离的问题。但由于传统操作系统内核中并没有真正的组件对象模型(The?ComponentObject?Model,简称COM)去支持这种特征,使得这种模型存在以下两个问题:一是没有通用性,需要为每一类设备实现一个面向上层应用的伪驱动程序;二是由于需要接口层的转接,带来了额外的效率开销,有时还会增加不必要的数据拷贝。

        在COM中,所有的构件都是以类标识(Class?Identification,简称CLSID)作为构件类的唯一标识,每一个CLSID就对应了一个构件实现。

        COM规范认为:将虚接口抽象出来,就实现了二进制的多态。但实际情况并不完全如此。构件客户端在使用构件时,还是需要指定构件服务器的CLSID来创建构件对象,指定CLSID实际上就是指定了构件的实现。

        以上述的打印机模型为例:假设打印驱动程序都是构件化的,并且它们都实现了“打印机公共接口”;如果要求应用程序在创建驱动对象时指定CLSID,也就指定了用什么打印驱动程序,这样实际上依然达不到设备及驱动对应用程序透明的目的。

        因此,把接口抽象出来只是实现了构件方法调用的多态性,并未实现构件创建的多态性。而一个构件的使用总要经过创建、调用、消亡这三个过程,只有实现了构件创建的多态性,才可以实现构件使用的多态。

        【发明内容】

        本发明的主要目的在于提供一种基于类别创建驱动构件对象实现设备驱动程序多态性的方法,操作系统根据客户的指定,自动根据指定的构件类型选用相应的构件,进一步实现应用程序对驱动程序的多态访问。

        本发明的目的是这样实现的:

        一种基于类别创建驱动构件对象实现设备驱动程序多态性的方法,至少包括:

        步骤1:定义并实现驱动构件类别;

        步骤2:构件客户程序基于该驱动构件类别创建驱动对象。

        上述的实现方法还进一步包括:在构件类别中设定该类别的缺省类标识(CLSID)。

        上述的构件类别中CLSID的设定方法为:对构件类别及其所属的构件类进行注册,并将最后一个注册到构件类别中的CLSID作为该构件类别的缺省CLSID。

        上述的构件类别中CLSID的设定方法还可以为:

        步骤31:读入系统构件类别注册文件中的类别注册信息;

        步骤32:读取打包在对应的动态连接库文件资源段(Resource?Section)中的构件元数据;

        步骤33:在构件元数据中查找是否定义了新的类别,否则执行步骤35;

        步骤34:把包括驱动构件类别标识的新的类别信息添加到类别注册信息中;

        步骤35:在元数据中查找是否存在属于类别注册信息中构件类别的构件类,不存在,则执行步骤37;

        步骤36:将包括驱动构件类别标识的构件类信息添加到相应的构件类别名下,并将该构件类作为该类别的缺省构件类;

        步骤37:将修改后的类别注册信息写回到系统类别注册文件中。

        上述的构件类别中CLSID的设定方法又可以为:如果定义构件类别的动态连接库文件中有一个以上的构件类相应的构件类别,则使用最后一个属于该类别的构件类作为缺省类,否则返回失败信息。

        上述的步骤1具体包括如下的定义步骤:

        步骤11:通过继承定义的构件类别定义构件类;

        步骤12:根据构件的功能需求实现构件类;

        步骤13:编译构件程序并自动注册构件类别。

        其中,步骤13具体包括:

        步骤131:对构件程序进行编译,生成构件动态连接库文件;

        步骤132:将定义的构件类别及类别所包含的构件类进行注册。

        本发明在定义并实现驱动构件类之前,还包括使用构件描述语言定义驱动的类别。

        上述的驱动构件类允许定义一个或一个以上的接口。

        上述的步骤2具体包括如下的创建步骤:

        步骤21:指定要创建驱动对象的驱动构件类别标识(CATID);

        步骤22:取该类别的缺省类标识CLSID;

        步骤23:判断该CLSID是否属于驱动程序类别,如果是,则执行步骤24;如果不是,则使用CLSID创建出普通的构件对象,执行步骤26;

        步骤24:使用CLSID创建具体的驱动对象;

        步骤25:从驱动对象查询(QueryInterface,COM规范所规定的用于从构件对象中查询它是否支持指定的接口的一个标准方法)出类别中的公用接口;

        步骤26:返回该类别的公共接口。

        本发明具有如下的优点:

        1)不需为每个种类的驱动实现一个伪驱动作为公用入口,而只要定义这种驱动类别的公用接口,属于这个类别的驱动都实现该公用接口;

        2)本发明只有在创建驱动对象的过程中的动态绑定时才需要附加一些效率上的开销;一旦驱动对象创建出来,操作系统把驱动对象所实现的公共接口返回给应用程序,应用程序就可以直接调用具体驱动对象的方法,没有额外的效率开销;实现了应用程序对驱动程序的多态访问。

        【附图说明】

        图1为传统驱动模型的示意图;

        图2为本发明基于构件类别的驱动模型示意图;

        图3为本发明实现基于构件类别驱动程序创建的流程图。

        【具体实施方式】

        以下结合附图和具体的实施例对本发明作进一步的详细说明:

        为了达到本发明的目的,设计的一个构件类别包含了一组公用接口,具体的某个驱动构件类(class)要属于这个类别,就必须继承该类别,并实现该类别包含的所有接口。构件类别本身没有实现代码,因此,构件类别也可以被称为抽象类或超类。

        继承于构件类别的所有构件类(class)均实现构件类别中包含的所有接口,这也正是构件类别作为类别中所有构件类的公共入口点的技术基础。

        参见图2,其为以打印驱动为例,用构件类别创建构件化驱动程序的模型示意图。

        应用程序通过指定打印驱动类别来创建构件驱动,操作系统为该应用程序创建出类别中缺省的打印驱动,然后把该打印驱动的接口返回给应用程序,应用程序就可以直接调用该打印驱动对象的接口方法来执行打印操作。

        例如:在应用层,应用程序通过指定打印机类别,例如:HP?LaserJet(一种类型的打印机),向操作系统提出创建打该印驱动的请求。

        操作系统根据应用程序指定的HP?LaserJet类别标识,找出该类别中缺省的构件(在示意图中为HP?LasertJet),并创建出驱动构件对象。

        创建对象成功后,操作系统把对象的公共接口直接返回给应用程序。这样,应用程序调用的接口方法就是直接调用HP?LasertJet驱动对象的接口方法,不再需要操作系统的参与、转接了。

        参见图3,具体的实现方法为:

        首先定义驱动类别,例如在构件对象???Easy?Component?ObjectModel,简称ezCOM)的构件描述语言(Component?Description?Language,简称CDL)文件中使用构件描述语言定义的驱动类别,如:定义一个名称为“CatPrinter”的打印驱动类别,用具体的CDL语言描述如下:

        ?[uuid(02aff0b1-a887-4da7-bf2e-626af6165a56)]

        category?CatPrinter{

        ??interface?IPrinter;

        }

        其中,

        [uuid(02aff0b1-a887-4da7-bf2e-626af6165a56)]与现有的COM规范相同;表示该构件的属性信息;

        category?CatPrinter定义一个打印机类别CatPrinter;

        interface?IPrinter定义一个打印机接口Iprinter。

        打印驱动类别CatPrinter包含了一个打印机接口IPrinter(关于接口的概念及定义方式请参见相关COM规范)。本发明中,一个类别中允许定义一个到多个接口。

        定义构件类

        如果某个驱动构件类要属于打印驱动类别CatPrinter,那么它必须继承该打印驱动类别CatPrinter,例如:HP?LaserJet?6L打印驱动构件的定义方式,以具体的CDL语言描述如下:

        [uuid(9defd903-6443-4eed-b4e4-a3020b448cb5),driver]

        class?CHPLaserJet6L:CatPrinter{

        ???interface?ILaserJet6L;

        }

        其中,

        [uuid(9defd903-6443-4eed-b4e4-a3020b448cb5),driver]与现有的COM规范相同;表示该构件的属性信息;

        class?CHPLaserJet6L:CatPrinter定义一个打印机类CHPLasterJet?6L

        interface?ILaserJet6L表示:定义一个打印机接口ILaserJet6L。

        其中,类CHPLasterJet6L的定义本身包含了打印机接口ILaserJet6L,同时由于它继承了打印驱动类别CatPrinter,并且还包含了打印驱动类别CatPrinter中的打印机接口IPrinter。

        此外,在构件类(class)前的驱动(driver)属性声明之中,说明了类CHPLaserJet6L是一个驱动程序。因此,CHPLaserJet6L还必须实现另外一个隐含的系统接口:驱动接口Idriver;因为,驱动程序本身也是一个类别,操作系统中所有以驱动(driver)属性定义的构件类都属于驱动程序类别CatDriver,驱动接口IDriver则包含在驱动程序类别CatDriver之中。

        本实施例中,驱动程序类别CatDriver中包含了驱动接口IDriver。本实施例中所有驱动构件类都是从驱动程序类别CatDriver继承来的;其中,驱动程序类别CatDriver的定义如下:

        [uuid(0000112d-0000-0000-C000-000000000066)]

        category?CatDriver{

        ????interface?IDriver;

        }

        其中,

        [uuid(0000112d-0000-0000-C000-000000000066)]与现有的COM规范相同;表示该构件的属性信息;

        category?CatDriver定义一个驱动设备类别CatDriver;

        interface?Idriver定义一个驱动设备接口Idriver;

        驱动设备类别Idriver包含了一个驱动设备接口Idriver。本发明中,一个类别中允许定义一个到多个接口。

        实现构件类

        使用ezCOM的CDL编译器编译定义驱动构件类别以及构件类的CDL文件,会产生构件源程序的框架。该框架中包含了构件类所有接口的方法,构件实现者需要根据构件的功能填写相应的实现代码。以Cprinter为例,就必须实现IPrinter、ILaserJet6L及IDriver三个接口中的所有方法。

        编译构件程序并自动注册构件类别

        实现代码完成后,需要对构件程序进行编译生成构件的动态连接库文件。构件类别CatPrinter会被自动添加到类别注册文件“category.cfg”之中,类CHPLasterJet69则会被添加到类别CatPrinter之中,同时也会被添加到构件类别CatDriver之中。

        重复上述的过程,可以定义并实现多个属于对应的驱动构件类。

        驱动构件程序编译生成后,可以通过编写构件客户应用程序来使用驱动程序提供的功能。构件客户程序可以通过使用类别的智能指针来创建驱动对象,例如:通过以C++语言描述的类别CatPrinter创建打印驱动对象的代码如下:

        #import<printer.dll>

        .......

        CatPrinterRef?catPrinterRef;

        hr=catPrinterRef.Instantiate();

        if(FAILED(hr)){

        ??......

        }

        ......

        客户程序创建驱动对象

        驱动构件客户程序通过类别创建驱动对象的实现过程如下:

        1)指定驱动构件类别标识(CATID)来创建驱动对象;

        2)取该类别的缺省(default)CLSID;

        3)判断该CLSID是否属于驱动程序类别(CatDriver);

        4)使用CLSID创建具体的驱动对象;

        5)从驱动对象查询出类别中的公用接口;

        6)返回类别公共接口;

        构件客户在得到上述的公共接口后,就可以调用这些公共接口的功能。

        本发明中还包括构件类别中的缺省类标识(CLSID)的设定方法,具体的设定可以是下列的三种之一:

        编译工具在编译构件程序时,可自动对构件类别及其所属的构件类进行注册,并且将最后一个注册到构件类别中的CLSID作为该构件类别的缺省CLSID。

        使用专用的工具注册构件类别中的缺省类标识。

        当编译生成构件程序的动态链接库(DLL)文件后,编译工具自动调用对构件进行注册。

        在没有注册文件的情况下,可以使用定义构件类别的动态连接库文件。如果该文件中有一个以上的构件类属于该类别,则使用第一个属于该类别的构件类作为缺省类,否则返回失败。

        最后应说明的是:以上实施例仅用以说明本发明而并非限制本发明所描述的技术方案;因此,尽管本说明书参照上述的各个实施例对本发明已进行了详细的说明,但是,本领域的普通技术人员应当理解,仍然可以对本发明进行修改或者等同替换;而一切不脱离本发明的精神和范围的技术方案及其改进,其均应涵盖在本发明的权利要求范围当中。

    关于本文
    本文标题:基于类别创建驱动构件对象实现设备驱动程序多态的方法.pdf
    链接地址://www.4mum.com.cn/p-6198287.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    [email protected] 2017-2018 www.4mum.com.cn网站版权所有
    经营许可证编号:粤ICP备17046363号-1 
     


    收起
    展开
  • 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
  • 重庆欢乐生肖官网 pk10计划软件哪个好 2019中国女篮决赛时间 广东11选5一期计划软件 稳定长期稳赚注码法 谁有极速时时网站 福彩3d六5码最大遗漏 可以玩天津时时 香港刘伯温四肖 澳洲pk10官网 安徽快三有没有单双 时时彩8码平刷稳赚方案 时时彩二星直选稳赚 51彩票计划软件下载 河北时时在线投注 福彩3d单选投注技巧