新四季網

一種組件間調用方法

2023-09-11 06:18:15


專利名稱::一種組件間調用方法
技術領域:
:本發明涉及一種程序執行方法,尤其是一種程序執行過程種組件間的調用方法。
背景技術:
:應用程式可執行的文件(Executableprogram),是指為了完成某項或某幾項特定任務而被開發運行於作業系統之上的電腦程式。它符合作業系統指定的某種格式,並以二進位的形式被存儲,作業系統負責對程序的加載和運行。早期的程序設計沒有組件的思想,所有功能都集中在一個可執行文件中。現今,應用程式通常以功能為標準被劃分為多個相對獨立的組件進行編寫。每個組件相對獨立,組件間通過接口實現相互的調用。當一個功能需求發生變化時,在保持接口不變的前提下,修改發生變化的功能組件,可使其它組件的代碼保持不變。每個組件編寫完成後,應用程式可以在需要組件的功能時動態的連結到組件,調用組件的接口。從而減少應用程式的大小和啟動時間;同時,這個組件也可以同時被多個應用程式使用。為了減少軟體開發的複雜性,提高組件的重用性,現有的作業系統都提供了組件的構建標準,在Windows下我們稱基於該標準的組件為動態連結庫(DLL,DynamicLinkLibrary);在Linux下稱為共享對象文件(SoSharedObjectFile)等。以windows作業系統下的動態連結庫為例組件C編寫完成後,可編譯成一個DLL。在運行時,只有當EXE程序要調用這些DLL組件時,系統才會將它們裝載到內存空間中。這種方式不僅減少了EXE文件的大小和對內存空間的需求,而且使這些DLL組件可以同時被多個應用程式使用。同時,為了在Windows平臺形成一種統一的組件開發和調用規範,實現組件間的通信以及組件間的調用,微軟提出組件對象模型(COM,ComponentObjectModel)的方法,但由於其調用機制使得在組件與組件、客戶與組件之間的調用實現之前需要編寫大量的代碼,實現複雜;並且,由於COM組件必須在註冊表中註冊以獲取組件ID,在調用時通過查找註冊表加載組件,然而,只有Windows平臺存在註冊表,因而基於COM開發的組件不能進行跨作業系統的移植。
發明內容本發明的目的是提供一種組件間調用的方法,該方法能夠不依賴註冊表,並且實現簡單。為解決上述技術問題,本發明的目的是通過以下技術方案實現的1)為每個組件建立確定的標識和用於創建組件的函數,以及建立組件接口;2)程序加載到預置的共享內存,並觸發將組件標識以及所述函數保存到共享內存;3)客戶組件請求調用目標組件,系統查找目標組件標識以調用所述函數創建組件,返回目標組件接口,客戶組件根據所述接口實現功能調用。在上述方法基礎上,1)中還包括將多個所述的組件進行編譯,構成組件集。上述方法中,3)中系統調用所述函數後,返回組件的接口指針,客戶組件根據共享內存中的接口指針獲取目標組件的接口。2)中程序加載到內存後,系統根據主程序的配置文件中預置的組件地址,讀取確定目錄下的組件,將組件接口集加入特定的共享內存;系統根據組件構造函數中預置的代碼,進行保存組件標識及所述函數的操作。以上技術方案可以看出,本發明中程序加載到內存時將組件的信息保存到內存中,使得本發明的實現不需要依賴作業系統的特殊設置,例如採用本發明的方法實現組件間的調用時不依靠Windows系統中特有的註冊表,因此本發明的組件間的調用不依賴於特定的作業系統,使得本發明的方法是可以跨操作平臺實現。並且,在實際程序開發中採用本發明的方法時發現,與現有的依靠特定系統實現組件調用的方法相比,本發明組件間的調用相對簡單,不需要大量的編碼工作,從而提高了軟體的開發效率。本發明利用了系統提供的共享內存,通過在共享內存中管理和維護特定的組件信息結構,從而使得各組件在所述共享內存中進行相互訪問,使得組件間的調用更加方便簡單。進一步,本發明中可以把多個組件編譯成一個組件,實踐證明,本發明中把多個組件編譯成一個組件,在讀取組件的過程中,減少了對磁碟的輸入輸出操作,提高了組件加載和執行效率。並且,實踐中發現,由於每個組件都會被自動註冊在內存中,因而,在這種方法下將多個組件編譯為一個組件,給軟體開發提供了調試和發布的靈活性。圖1為本發明較佳實施例流程圖;圖2為本發明組件調用過程示意圖。具體實施例方式本發明涉及一種組件間調用的方法。其核心在於每當可執行程序被加載到內存後,自動把指定目錄下的所有組件信息(組件ID和創建該組件的函數指針)加載到可執行程序創建的一塊共享內存中,調用某一個組件時,根據內存中組件所保存的信息,創建組件對象,從而實現組件功能調用。以下說明本發明的一較佳實施例,該實施例的原理為當一個進程開始時,執行體DLL或EXE被加載到內存,利用C++程式語言的全局對象的構造函數先於C運行庫(C-RuntimeLibrary)執行的原理,在某個全局對象的構造函數中把組件內的信息組(組件ID,組件的創建體)存儲在作業系統中進程的一塊內存上,使得進程的任何組件和客戶程序都能獲取到這些信息組並根據信息組中的創建體創建組件對象。當調用一個組件時,通過組件ID查找在內存中保存的用於創建組件的函數,再通過對該函數的調用創建組件。組件被創建後,可以調用組件的接口來實現特定的組件功能。參照圖1,本發明較佳實施例的實現方法如下。步驟11為每個組件賦予確定的標識ID和用於創建該組件的函數,以及建立組件接口;建立共享內存。所述組件,亦稱為模塊,其特徵包括是封裝性,組件必須向外部隱藏其內部的實現細節,使從外部所能看到的只是接口;組件必須能動態連結到一起,被調用的時候不必重新編譯。本發明中為每個組件賦予一個唯一的標識和用於創建該組件的函數。與上文所述現有技術的COM方法相比,本發明為每個組件預置唯一的標識,而並非如COM組件一樣,其ID通過在註冊表中註冊後獲取。由於組件向外部隱藏了其內部的細節,因此客戶要使用組件時就必須通過一定的機制,即通過一定的方法實現客戶與組件之間的通信,這就需要接口。所謂接口就是組件對外的、向外部客戶提供服務的「連接點」。外部的客戶見不到組件內部的細節,它所能看到的只是接口,客戶也是通過接口來獲取組件提供的服務,通常,組件的開發人員負責實現這個接口,而客戶則通過接口獲得服務。本文所述的客戶是指要使用某一個組件的程序或組件,也就是說,本文的客戶是相對組件來說的。本發明中為每個組件提供一個接口,用於其他組件的函數調用。通過應用程式接口(API)應用程式建立一塊共享內存,用於本發明中對組件信息的管理以及調用。所述共享內存的建立為本領域公知技術。步驟12對每個組件進行編譯,並保存到指定的目錄;根據需要也可以將多個組件編譯成一個組件集,亦即將多個組件編譯為一個DLL或一個EXE。具體的,將每個組件進行編譯,並保存到指定的目錄下,在主程序的配置文件中標識組件保存的地址信息,使得系統執行到所述配置文件時可到正確的目錄下讀取程序運行所需的所有組件。步驟13某個組件加載到內存時,觸發將組件標識以及所述函數保存到內存。如上文所述,本實施例中利用C++程式語言的全局對象的構造函數先於C運行庫(C-RuntimeLibrary)執行的原理,在某個全局對象的構造函數中把組件內的信息組(組件ID,組件的創建函數)存儲在作業系統中進程的一塊內存上。每個組件都會提供一個入口地址,即告知系統讀取該組件後所應執行的代碼,所述入口地址一般指向編譯器設定的地址。C++編譯器會自動設定這個地址,從而在這個地址上調用全局對象的構造函數。當組件被加載到內存後,依據組件提供的入口地址,系統會自動去執行構造函數,本發明在組件的構造函數中編寫代碼,用於在共享內存中保存組件信息。當進程開始時,系統根據所述主程序中的配置文件到正確的目錄下讀取組件,進而系統執行所述構造函數將組件的唯一標識以及用於創建組件的函數加載到內存中。加載指定目錄下的組件信息時,每加載一個組件的信息,就要有一次遍歷該目錄的操作,進行一次輸入輸出操作,浪費系統資源。因而,上述步驟12中將多個組件編譯成一個組件(組件集),進而加載組件時減少了輸入輸出操作,提高了效率。在多個組件編譯為一個組件集後,在加載該組件集信息到內存的過程中,由於,每個組件代碼裡都有一個不同的全局對象(通過C++宏的使用實現),該個組件集內的每個組件的信息是獨立保存的。步驟14發生組件調用,在內存中查找目標組件標識以調用函數創建組件,返回目標組件的實例。通過這個實例可以調用組件的各個功能接口,據所述接口實現功能調用。組件間進行調用時,通過共享內存中保存的組件信息,獲取創建被調用組件(目標組件)的函數指針,組件被創建後,返回組件接口指針,客戶通過所述組件接口指針獲取目標組件的接口,進而實現組件間的功能調用。現有技術中,應用程式執行後,被加載到內存,當應用程式要調用組件時,組件信息會被寫到內存中。假設應用程式需要調用3個組件,分別是dll1、dll2、dll3,程序會為這三個組件創建一個內存空間,供其寫入信息。然而這三個內存空間都是獨立的,互無關係,導致三個組件間進行訪問時,實現繁瑣。本發明中採用了共享內存的機制。本發明實施例中,應用程式首先通過系統提供的函數創建一塊共享內存,當應用程式調用組件時,會為每個組件在這塊共享內存中創建一塊空間,每個組件可通過組件名稱互相訪問。通過組件名稱進行訪問是系統為共享內存提供的一種命名機制。通常,每個組件只能對自己的空間進行管理,其他組件及應用程式都無權對其管理。例如應用程式調用完dll1,需要釋放dll1所在的這塊空間,而應用程式無權做這項工作。這個缺陷導致組件空間管理上,很不靈活。本發明為每個組件建立了唯一的標識ID,通過傳送組件ID,可以達到組件間進行內存空間管理的目的。參照圖2,進一步說明組件調用過程的處理方法。如圖所示,圖中可執行程序EXE,由組件1、組件2、組件3、組件4、組件5組成。進程開始,當EXE被加載到內存,組件1到組件5分別被加載到應用程式建立的共享內存中,依據組件提供的入口地址,系統自動執行構造函數,保存每個組件的信息(唯一標識ID和用於創建該組件的函數)到共享內存中。組件信息保存後,被加載的組件可釋放內存空間。然而,組件對內存空間的釋放並非本發明所必不可少的操作。當發生組件調用,假設組件1調用組件3,根據組件3的唯一標識ID3,查找到用於創建組件3的函數CoCreate3,創建組件3後,返回組件3的接口指針,組件1通過所述組件3接口的指針獲取該接口,並通過該接口調用組件3的功能函數。以上對本發明所提供的一種組件間調用方法進行了詳細介紹,本文中應用了具體個例對本發明的原理及實施方式進行了闡述,以上實施例的說明只是用於幫助理解本發明的方法及其核心思想;同時,對於本領域的一般技術人員,依據本發明的思想,在具體實施方式及應用範圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本發明的限制。權利要求1.一種組件間調用方法,其特徵在於1)為每個組件建立確定的標識和用於創建組件的函數,以及建立組件接口;2)程序加載到預置的共享內存,並觸發將組件標識以及所述函數保存到共享內存;3)客戶組件請求調用目標組件,系統查找目標組件標識以調用所述函數創建組件,返回目標組件接口,客戶組件根據所述接口實現功能調用。2.如權利要求1所述的組件間調用方法,其特徵在於1)中還包括將多個所述的組件進行編譯,構成組件集。3.如權利要求1所述的組件間調用方法,其特徵在於3)中系統調用所述函數後,返回組件的接口指針,客戶組件根據共享內存中的接口指針獲取目標組件的接口。4.如權利要求1所述的組件間調用方法,其特徵在於2)中系統根據組件構造函數中預置的代碼,進行保存組件標識及所述函數的操作。5.如權利要求1或4所述的組件間調用方法,其特徵在於2)中程序加載到內存後,系統根據主程序的配置文件中預置的組件地址,讀取確定目錄下的組件,將組件接口集加入特定的共享內存。全文摘要本發明涉及一種組件間調用方法,包括1)為每個組件建立確定的標識和用於創建組件的函數,以及建立組件接口;2)程序加載到預置的共享內存,並觸發將組件標識以及所述函數保存到共享內存;3)客戶組件請求調用目標組件,系統查找目標組件標識以調用所述函數創建組件,返回目標組件接口,客戶組件根據所述接口實現功能調用。本發明的組件間的調用不依賴於特定的作業系統,使得本發明的方法可以跨操作平臺實現。本發明組件間的調用相對簡單,不需要大量的編碼工作,從而提高了軟體的開發效率。文檔編號G06F9/46GK1834918SQ20051011549公開日2006年9月20日申請日期2005年11月4日優先權日2005年11月4日發明者孫華慶,周焱申請人:北京金山軟體有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀