Com组件处理方法和装置的制造方法

文档序号:10534562阅读:477来源:国知局
Com组件处理方法和装置的制造方法
【专利摘要】本申请公开了一种COM组件处理方法。在一应用程序的进程加载所述进程外的所述COM组件之前,该包括:获取所述COM组件的COM代理组件;在所述当前进程内加载所述COM代理组件;将所述COM代理组件注册到所述进程中。通过本发明实施例提供的技术方案,可以提供COM组件注册的可靠性。
【专利说明】
COM组件处理方法和装置
技术领域
[0001 ]本发明涉及计算机技术领域,尤其涉及一种COM组件处理方法和装置。
【背景技术】
[0002]COM(组件对象模型,Component Object Model)组件是微软公司为了使计算机工业的软件的生产更加符合人类的行为方式而开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。

【发明内容】

[0003]本发明实施例提供一种COM组件处理方法和装置,以提高COM组件注册的可靠性。
[0004]本发明实施例提供一种COM组件处理方法,在一应用程序的进程加载所述进程外的所述COM组件之前,该包括:
[0005]获取所述COM组件的COM代理组件;
[0006]在所述当前进程内加载所述COM代理组件;
[0007]将所述COM代理组件注册到所述进程中。
[0008]本发明实施例提供一种COM组件处理装置,应用于在一应用的进程中加载所述进程外的所述COM组件的客户端,该装置包括:
[0009]获取模块,用于获取所述COM组件的COM代理组件;
[0010]加载模块,用于在所述当前进程内加载所述COM代理组件;
[0011 ]注册模块,用于将所述COM代理组件注册到所述进程中。
[0012]在本发明实施例中,在该进程加载进程外的COM组件之前,获取该COM组件的COM代理组件。在当前进程内加载该COM代理组件,并将该COM代理组件注册到该进程中。通过该处理过程,可以实现该COM组件在该进程内的注册。无需将该COM组件注册到系统的注册表中,因此可以避免因注册表的损坏而造成的注册失败,提高注册的可靠性。
【附图说明】
[0013]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0014]图1为本发明实施例提供的一种COM组件处理方法的流程示意图;
[0015]图2为本发明实施例提供的一种COM组件处理方法流程示意图;
[0016]图3为本发明实施例提供的一种COM组件处理方法流程示意图;
[0017]图4为本发明实施例提供的一种COM组件处理装置的结构示意图;
[0018]图5为本发明实施例提供的一种COM组件处理装置的结构示意图。
【具体实施方式】
[0019]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0020]在本发明一实施例中,在进程加载该进程外的COM组件之前,需要将该COM组件注册到操作系统。操作系统在注册表中记录该COM组件的地址。当进程加载该COM组件时,该进程查找该注册表,找到该COM组件,将该COM组件加载到当前进程。
[0021]上述注册表中的内容有可能被破坏,为了避免因系统保存的注册表中的内容被破坏而造成的注册失败,本发明实施例提供如下解决方案。
[0022]图1为本发明实施例提供的一种COM组件处理方法的流程示意图。如图1所示,在本发明实施例中,在一个应用程序的进程加载该进程外的COM组件之前,该方法包括如下步骤:
[0023]步骤101,获取所述COM组件的COM代理组件。
[0024]步骤102,在所述当前进程内加载所述COM代理组件。
[0025]步骤103,将所述COM代理组件注册到所述进程中。
[0026]在本发明实施例中,在该进程加载进程外的COM组件之前,获取该COM组件的COM代理组件。在当前进程内加载该COM代理组件,并将该COM代理组件注册到该进程中。通过该处理过程,可以实现该COM组件在该进程内的注册。无需将该COM组件注册到系统的注册表中,因此可以避免因注册表的损坏而造成的注册失败,提高注册的可靠性。此外,还可以减轻系统的负担。
[0027]图2为本发明实施例提供的一种COM组件处理方法流程示意图。如图2所示,在一个应用程序的进程加载该进程外的COM组件之前,该方法包括如下步骤。
[0028]本发明实施例可以应用于所有需要在进程内调用该进程外的COM组件的应用程序。在本发明实施例中,可以是在该进程启动时,也可以是该进程准备加载该COM组件时,获取该COM组件的COM代理组件并将该COM代理组件注册当本进程。
[0029]步骤201,获取所述COM组件的COM代理组件。
[0030]进程是操作系统结构的基础;是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动;是程序在一个数据集合上运行的过程;它是系统进行资源分配和调度的一个独立单位。在本发明实施例中的进程指的是任意需要调用该进程外的COM组件的进程。
[0031]在本发明实施例中,该应用程序可以为任意应用程序,例如浏览器、社交软件等。该COM组件是在COM架构下开发出的特定功能的组件,例如视频插件。
[0032]在本实施例中,当一应用程序,例如浏览器被打开,该浏览器的进程被执行时获取该COM组件的代理组件。也可以是在,程序运行过程中,当需要调用该COM组件时,获取该COM组件的代理组件,并进行注册。
[0033]在本发明一实施例中,该⑶M组件的代理组件也是一种⑶M组件。该⑶M组件和该COM代理组件是——对应的,可以预先将该COM组件的COM代理组件保存在当前进程的安装文件所在的文件目录下。在获取该COM代理组件的过程中,可以到该安装文件所在的文件目录下去查找。
[0034]步骤202,在当前进程内加载该COM代理组件。
[0035]步骤203,将该COM代理组件注册到该进程中。
[0036]在本发明实施例中,通过获取该COM代理组件的接口未知(IUnknown)接口,并将所述IUnknown接口注册到所述进程,以及获取所述COM代理组件的类标识(CLSID)和接口标识(IID),并将所述CLSID和IID注册到所述进程。
[0037]步骤204,利用该COM代理组件调用该COM组件对应的COM进程。
[0038]在本步骤中,调用该COM组件对应的COM进程的方法包括:
[0039]触发所述COM代理组件对参数进行列集处理;指令所述COM代理组件将列集处理的所述参数发送给所述COM组件对应的COM进程,以使所述COM进程利用所述列集处理的参数调用所述COM进程对应的函数生成执行结果;接收所述COM进程返回所述执行结果。在本发明实施例中,该列集处理的参数可以为该COM进程对应的函数的输入变量。
[0040]利用本发明实施例,当进程需要加载该进程外的COM组件时,该进程先将该COM组件的COM代理组件注册到本进程。在将该COM代理组件注册到该进程后,可以利用该COM代理组件调用该COM组件对应的COM进程。
[0041]图3为本发明实施例提供的一种COM组件处理方法流程示意图。如图3所示,在一个应用程序的进程加载该进程外的COM组件之前,该方法包括如下步骤。
[0042]步骤301,加载COM代理组件。
[0043]在本实施例中,需要调用的COM组件为该进程外的组件。假设需要注册的COM组件的接口为I ID_Idict 1nary。假设该COM组件的COM代理组件为ProComPS.dll。该进程可以调用LoadLibrary 加载该ProComPS.dll。
[0044]步骤302,获取代理函数地址。
[0045]在本发明实施例中,获取P r ο C ο m P S.d I I导出的代理函数地址,SPDllGetClassObjecto
[0046]步骤302,获取IUknown接口。
[0047]将该IUknown接口作为CLSID调用该DllGetClassObject获取该IUknown接口。
[0048]步骤304,判断是否成功获取到该IUknown接口。如果成功获取该IUknown接口,则执行步骤305;否则执行步骤309,结束该流程。
[0049]步骤305,将该IUknown接口注册到当前进程。
[0050]利用CoRegisterClassObject将该获取到的IUknown接口注册到当前进程。
[0051 ] 步骤306,判断是否成功将IUknown接口注册到当前进程。如果成功将该IUknown接口注册到当前进程执行步骤307;否则执行步骤309,结束本流程。
[0052]步骤307,将该COM代理组件的CLSID和IID注册到当前进程。
[0053]在本步骤中,该CLSID和IID均为IID_IDict1nary。利用CoRegisterPSClsid将该CLSID和IID注册到当前进程。
[0054]步骤308,利用该COM代理组件调用该COM组件对应的COM进程。
[0055]在本发明实施例中,调用该COM组件对应的COM进程包括:触发所述COM代理组件对参数进行列集处理;指令所述COM代理组件将列集处理的所述参数发送给所述COM组件对应的COM进程,以使所述COM进程利用所述列集处理的参数调用所述COM进程对应的函数生成执行结果;接收所述COM进程返回所述执行结果。
[0056]该进程利用CoCreateInstance获取该COM代理组件的接口,即IID_Idict1nary0调用IDict1nary中的函数以触发该COM代理组件对参数进行列集处理,并指令该COM代理组件将经列集处理的参数发送给该COM组件对应COM进程。该COM进程利用该经列集处理的参数执行该COM进程对应的函数,生成执行结果并返回。
[0057]步骤309,结束本流程。
[0058]通过上述实施例可以将该进程外的COM组件的注册到本进程,并完成该COM组件的调用,可以提高注册的可靠性,减轻系统的负担。
[0059]图4为本发明实施例提供的一种COM组件处理装置的结构示意图。该装置可以应用于在一个应用的进程中加载该进程外的COM组件的客户端。该装置包括:获取模块401、加载模块402和注册模块403。
[0060]该获取模块401,用于获取所述COM组件的COM代理组件。
[0061]该加载模块402,用于在所述当前进程内加载所述COM代理组件。
[0062]该注册模块403,用于将所述COM代理组件注册到所述进程中。
[0063]在本发明一实施例中,该获取模块401,进一步用于在所述当前进程的安装文件所在的文件目录下查找与所述COM组件一一对应的所述COM代理组件。
[0064]在本发明一实施例中,该注册模块403包括:第一注册子模块4031和第二注册子模块4032。该第一注册子模块4031,用于获取所述⑶M代理组件的IUnknown接口,并将所述IUnknown接口注册到所述进程。该第二注册子模块4032,用于获取所述⑶M代理组件的CLSID和IID,并将所述CLSID和IID注册到所述进程。
[0065]在本发明一实施例中,该装置进一步包括:调用模块404。该调用模块404,用于利用该COM代理组件调用所述COM组件对应的COM进程。
[0066]在本发明一实施例中,该调用模块404包括:触发子模块4041、指令子模块4042和接收子模块4043。该触发子模块4041,用于触发所述COM代理组件对参数进行列集处理。指令子模块4042,用于指令所述COM代理组件将列集处理的所述参数发送给所述COM组件对应的COM进程,以使所述COM进程利用所述列集处理的参数调用所述COM进程对应的函数生成执行结果。接收子模块4043,用于接收所述COM进程返回所述执行结果。
[0067]图5为本发明实施例提供的一种COM组件处理装置的结构示意图。图5所示的装置可以应用于在一个应用的进程中加载该进程外的COM组件的客户端。该装置包括:处理器501、非易失性计算机可读存储器502、显示单元503、网络通信接口 504。这些组件通过总线505进彳丁通{目ο
[0068]本实施例中,存储器502中存储有多个程序模块,包括操作系统506、网络通信模块507和应用程序508。
[0069]处理器501可以读取存储器502中的应用程序所包括的各种模块(图中未示出)来执行⑶M组件处理装置的各种功能应用以及数据处理。本实施例中的处理器501可以为一个,也可以为多个,其可以为CPU,处理单元/模块,ASIC,逻辑模块或可编程门阵列等。
[0070]其中,操作系统506可以为:Windows操作系统、Android操作系统或苹果iPhone OS操作系统。
[0071]应用程序508可包括:COM组件处理模块509。该COM组件处理模块509可包括图4所示装置中的各个功能模块形成的计算机可执行指令集509-1及对应的元数据和启发式算法509-2。这些计算机可执行指令集可以由所述处理器501执行并完成图1所示方法或图4所示装置的功能。
[0072]在本实施例中,网络通信接口504与网络通信模块507相配合完成COM组件处理装置的各种网络信号的收发。
[0073]显示单元503具有一显示面板,用于完成相关信息的输入及显示。
[0074]如果该COM组件处理装置无通信需求,也可以不包括网络通信接口 504及网络通信模块507。
[0075]另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述各实施例的功能模块可以位于一个终端或网络节点,或者也可以分布到多个终端或网络节点上。
[0076]另外,本发明的每一个实施例可以通过计算机执行的数据处理程序来实现。显然,数据处理程序构成了本发明。此外,通常存储在一个存储介质中的数据处理程序通过直接将程序读取出存储介质或者通过将程序安装或复制到数据处理设备的存储设备(如硬盘和或内存)中执行。因此,这样的存储介质也构成了本发明。存储介质可以使用任何类型的记录方式,例如纸张存储介质(如纸带等)、磁存储介质(如软盘、硬盘、闪存等)、光存储介质(如CD-ROM等)、磁光存储介质(如MO等)等。
[0077]因此本发明还提供了一种存储介质,其中存储有数据处理程序,该数据处理程序用于执行本发明上述方法的任何一种实施例。
[0078]本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0079]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【主权项】
1.一种组件对象模型COM组件处理方法,其特征在于,在一应用程序的进程加载所述进程外的所述COM组件之前,该方法包括: 获取所述COM组件的COM代理组件; 在所述当前进程内加载所述COM代理组件; 将所述COM代理组件注册到所述进程中。2.根据权利要求1所述的方法,其特征在于,获取所述COM组件的COM代理组件包括: 在所述当前进程的安装文件所在的文件目录下查找与所述COM组件一一对应的所述COM代理组件。3.根据权利要求1所述的方法,其特征在于,将所述COM代理组件注册到所述进程中包括: 获取所述COM代理组件的接口未知IUnknown接口,并将所述IUnknown接口注册到所述进程; 获取所述COM代理组件的类标识CLSID和接口标识IID,并将所述CLSID和IID注册到所述进程。4.根据权利要求1所述的方法,其特征在于,进一步包括: 利用所述COM代理组件调用所述COM组件对应的COM进程。5.根据权利要求4所述的方法,其特征在于,利用所述COM代理组件调用所述COM组件对应的COM进程包括: 触发所述COM代理组件对参数进行列集处理; 指令所述COM代理组件将列集处理的所述参数发送给所述COM组件对应的COM进程,以使所述COM进程利用所述列集处理的参数调用所述COM进程对应的函数生成执行结果; 接收所述COM进程返回所述执行结果。6.—种组件对象模型COM组件处理装置,其特征在于,应用于在一应用的进程中加载所述进程外的所述COM组件的客户端,该装置包括: 获取模块,用于获取所述COM组件的COM代理组件; 加载模块,用于在所述当前进程内加载所述COM代理组件; 注册模块,用于将所述COM代理组件注册到所述进程中。7.根据权利要求6所述的装置,其特征在于,所述获取模块,进一步用于在所述当前进程的安装文件所在的文件目录下查找与所述COM组件一一对应的所述COM代理组件。8.根据权利要求6所述的装置,其特征在于,所述注册模块包括:第一注册子模块和第二注册子模块; 所述第一注册子模块,用于获取所述COM代理组件的IUnknown接口,并将所述IUnknown接口注册到所述进程; 所述第二注册子模块,用于获取所述COM代理组件的CLSID类标识和IID接口标识,并将所述CLSID和IID注册到所述进程。9.根据权利要求6所述的装置,其特征在于,进一步包括: 调用模块,用于利用所述COM代理组件调用所述COM组件对应的COM进程。10.根据权利要求9所述的装置,其特征在于,所述调用模块包括: 触发子模块,用于触发所述COM代理组件对参数进行列集处理; 指令子模块,用于指令所述COM代理组件将列集处理的所述参数发送给所述COM组件对应的COM进程,以使所述COM进程利用所述列集处理的参数调用所述COM进程对应的函数生成执行结果; 接收子模块,用于接收所述COM进程返回所述执行结果。
【文档编号】G06F9/445GK105893092SQ201610201537
【公开日】2016年8月24日
【申请日】2016年4月1日
【发明人】尚子峰
【申请人】腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1