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日
【發明人】尚子峰
【申請人】騰訊科技(深圳)有限公司