調(diào)用應(yīng)用程序組件的方法及裝置制造方法
【專利摘要】一種調(diào)用應(yīng)用程序組件的方法,包括:獲取組件調(diào)用請求;獲取與所述組件調(diào)用請求對應(yīng)的動態(tài)鏈接庫文件,所述動態(tài)鏈接庫文件包括庫函數(shù)和用戶界面定義;根據(jù)所述動態(tài)鏈接庫文件調(diào)用應(yīng)用程序組件。此外,還提供了一種調(diào)用應(yīng)用程序組件的裝置。上述調(diào)用應(yīng)用程序組件的方法和裝置可以提高開發(fā)效率。
【專利說明】調(diào)用應(yīng)用程序組件的方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)【技術(shù)領(lǐng)域】,特別是涉及一種調(diào)用應(yīng)用程序組件的方法及裝置?!颈尘凹夹g(shù)】
[0002]傳統(tǒng)技術(shù)中,應(yīng)用程序通常具有各自特定的功能,比如,畫圖軟件通常用于處理圖片,管理軟件通常用于統(tǒng)計(jì)管理數(shù)據(jù)和生成報(bào)表,多媒體軟件通常用于播放視頻文件或音頻文件。當(dāng)需要將應(yīng)用程序的功能集成到其他應(yīng)用程序中時,可將該應(yīng)用程序組件化為應(yīng)用程序組件以供其他應(yīng)用程序調(diào)用。
[0003]傳統(tǒng)技術(shù)中在創(chuàng)建應(yīng)用程序組件時,通常僅將應(yīng)用程序用于處理數(shù)據(jù)的庫函數(shù)打包成動態(tài)鏈接庫文件。在調(diào)用該應(yīng)用程序組件時,可通過加載該動態(tài)鏈接庫文件并調(diào)用庫函數(shù)來進(jìn)行數(shù)據(jù)處理,并通過函數(shù)調(diào)用返回處理結(jié)果。當(dāng)調(diào)用過程中需要用到用戶界面來獲取輸入?yún)?shù)或展示數(shù)據(jù)時,由調(diào)用該應(yīng)用程序組件的應(yīng)用程序(調(diào)用者)根據(jù)業(yè)務(wù)需求自行生成相應(yīng)的用戶界面。
[0004]例如,可將壓縮軟件組件化,提取壓縮軟件中用于數(shù)據(jù)壓縮的庫函數(shù)并打包成動態(tài)鏈接庫文件,并集成到其他應(yīng)用程序中。在調(diào)用該壓縮軟件組件時,可先加載該動態(tài)鏈接庫文件,調(diào)用其庫函數(shù)對指定的數(shù)據(jù)進(jìn)行壓縮。而當(dāng)需要展示壓縮進(jìn)度時,由調(diào)用者生成相應(yīng)的進(jìn)度條展示壓縮進(jìn)度。
[0005]然而,傳統(tǒng)技術(shù)中,調(diào)用者在調(diào)用應(yīng)用程序組件時,由于需要預(yù)先定義與應(yīng)用程序組件相關(guān)的用戶界面,對于開發(fā)人員來說,則增加了大量的編碼工作,使得工作量加大,從而降低了開發(fā)效率。
【發(fā)明內(nèi)容】
[0006]基于此,有必要提供一種能提高開發(fā)效率的調(diào)用應(yīng)用程序組件的方法。
[0007]一種調(diào)用應(yīng)用程序組件的方法,包括:
[0008]獲取組件調(diào)用請求;
[0009]獲取與所述組件調(diào)用請求對應(yīng)的動態(tài)鏈接庫文件,所述動態(tài)鏈接庫文件包括庫函數(shù)和用戶界面定義;
[0010]根據(jù)所述動態(tài)鏈接庫文件調(diào)用應(yīng)用程序組件。
[0011]此外,還有必要提供一種能提高開發(fā)效率的調(diào)用應(yīng)用程序組件的裝置。
[0012]一種調(diào)用應(yīng)用程序組件的裝置,包括:
[0013]請求獲取模塊,用于獲取組件調(diào)用請求;
[0014]動態(tài)鏈接庫獲取模塊,用于獲取與所述組件調(diào)用請求對應(yīng)的動態(tài)鏈接庫文件,所述動態(tài)鏈接庫文件包括庫函數(shù)和用戶界面定義;
[0015]組件調(diào)用模塊,用于根據(jù)所述動態(tài)鏈接庫文件調(diào)用應(yīng)用程序組件。
[0016]上述調(diào)用應(yīng)用程序組件的方法和裝置,由于調(diào)用的應(yīng)用程序組件對應(yīng)的動態(tài)鏈接庫中已包含了庫函數(shù)和用戶界面定義,因此作為調(diào)用者的應(yīng)用程序無需預(yù)先為應(yīng)用程序組件定義一套用戶界面。整個集成過程的代碼量較小,使得開發(fā)任務(wù)較少,從而提高了開發(fā)效率。
【專利附圖】
【附圖說明】
[0017]圖1為一個實(shí)施例中調(diào)用應(yīng)用程序組件的方法的流程圖;
[0018]圖2為一個實(shí)施例中調(diào)用應(yīng)用程序組件的裝置的結(jié)構(gòu)示意圖;
[0019]圖3為另一個實(shí)施例中調(diào)用應(yīng)用程序組件的裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0020]在一個實(shí)施例中,如圖1所示,一種調(diào)用應(yīng)用程序組件的方法,包括:
[0021]步驟S102,獲取組件調(diào)用請求。
[0022]組件調(diào)用請求即通知應(yīng)用程序調(diào)用應(yīng)用程序組件的請求。組建調(diào)用請求中可包含應(yīng)用程序組件標(biāo)識,用于區(qū)分需要調(diào)用的應(yīng)用程序組件。
[0023]在一個實(shí)施例中,可獲取根據(jù)輸入指令生成的組件調(diào)用請求。例如,應(yīng)用程序的用戶界面上可設(shè)置按鍵。當(dāng)檢測到該按鍵被觸發(fā)時,則會產(chǎn)生相應(yīng)的輸入指令,并根據(jù)輸入指令生成組件調(diào)用請求。
[0024]在一個實(shí)施例中,還可根據(jù)函數(shù)調(diào)用的返回結(jié)果獲取組建調(diào)用請求。應(yīng)用程序在運(yùn)行過程中,通過函數(shù)調(diào)用得到需要調(diào)用的應(yīng)用程序組件的標(biāo)識,可根據(jù)該應(yīng)用程序組件標(biāo)識生成組件調(diào)用請求。
[0025]也就是說,應(yīng)用程序既可根據(jù)觸發(fā)輸入指令生成組建調(diào)用請求來調(diào)用應(yīng)用程序組件,也可根據(jù)自身運(yùn)行的需要生成組建調(diào)用請求來調(diào)用應(yīng)用程序組件。
[0026]步驟S104,獲取與組件調(diào)用請求對應(yīng)的動態(tài)鏈接庫文件,動態(tài)鏈接庫文件包括庫函數(shù)和用戶界面定義。
[0027]動態(tài)鏈接庫文件可以是windows平臺中的.dll文件,也可以是Iinux平臺下的.so文件,也可以是java平臺下的.jar文件。將代碼打包成動態(tài)鏈接庫文件可以方便應(yīng)用程序調(diào)用。用戶界面定義為用于定義用戶界面的代碼集合,包括用于定義用戶界面的類文件和資源文件。
[0028]動態(tài)鏈接庫在操作系統(tǒng)中注冊有動態(tài)鏈接庫標(biāo)識。在一個實(shí)施例中,組建調(diào)用請求中包括應(yīng)用程序組件標(biāo)識,應(yīng)用程序組件標(biāo)識對應(yīng)動態(tài)鏈接庫標(biāo)識??筛鶕?jù)動態(tài)鏈接庫標(biāo)識獲取對應(yīng)的動態(tài)鏈接庫文件。
[0029]在一個實(shí)施例中,生成應(yīng)用程序組件的動態(tài)鏈接庫文件的過程為:
[0030]獲取應(yīng)用程序組件對應(yīng)的代碼,代碼包括庫函數(shù)文件、用戶界面定義文件;根據(jù)代碼生成動態(tài)鏈接庫文件。
[0031]通常情況下,應(yīng)用程序的代碼包括數(shù)據(jù)處理部分(庫函數(shù))和界面顯示部分(用戶界面定義)。也就是說,在將應(yīng)用程序組件化時,可將該應(yīng)用程序的代碼整體打包成動態(tài)鏈接庫文件(若打包成可執(zhí)行文件則可直接運(yùn)行),而不是僅僅提取其中的部分庫函數(shù)打包成動態(tài)鏈接庫文件。
[0032]步驟S106,根據(jù)動態(tài)鏈接庫文件調(diào)用應(yīng)用程序組件。
[0033]可載入動態(tài)鏈接庫文件,加載其中的庫函數(shù)文件和用戶界面定義文件,根據(jù)庫函數(shù)和用戶界面定義文件調(diào)用應(yīng)用程序組件。由于加載的動態(tài)鏈接庫文件中既包含庫函數(shù)文件,也包括用戶界面定義文件,因此,調(diào)用的應(yīng)用程序組件的過程就如同獨(dú)立運(yùn)行應(yīng)用程序組件,而其啟動過程由調(diào)用者(調(diào)用應(yīng)用程序組件的應(yīng)用程序)觸發(fā)。
[0034]在一個實(shí)施例中,根據(jù)動態(tài)鏈接庫文件調(diào)用應(yīng)用程序組件的步驟可具體為:
[0035]根據(jù)用戶界面定義生成原生界面窗口,通過原生界面窗口獲取輸入?yún)?shù),根據(jù)輸入?yún)?shù)通過調(diào)用庫函數(shù)生成處理結(jié)果。
[0036]原生界面窗口中的用戶界面由被調(diào)用的應(yīng)用程序組件的動態(tài)鏈接庫文件中的用戶界面定義生成。原生界面窗口中可包括文本框、下拉框、多選框等多個文本輸入組件、也可以包括鼠標(biāo)點(diǎn)擊監(jiān)聽器、鼠標(biāo)位置監(jiān)聽器、鍵盤操作監(jiān)聽器等多個用于檢測用戶輸入的事件觸發(fā)組件。原生界面窗口即可通過文本輸入組件、事件觸發(fā)組件等界面組件獲取輸入?yún)?shù)??蓪⑤斎?yún)?shù)傳遞給庫函數(shù)進(jìn)行函數(shù)調(diào)用,根據(jù)函數(shù)的返回值生成處理結(jié)果。
[0037]例如,圖像編輯組件的用戶界面定義中包含了鼠標(biāo)點(diǎn)擊監(jiān)聽器、鼠標(biāo)位置監(jiān)聽器??蓹z測鼠標(biāo)的點(diǎn)擊和拖動軌跡。可將鼠標(biāo)點(diǎn)擊和拖動涉及的坐標(biāo)作為參數(shù)傳遞給用于生成圖像的庫函數(shù),庫函數(shù)即可生成相應(yīng)的圖像。當(dāng)鼠標(biāo)點(diǎn)擊監(jiān)聽器檢測到原生界面窗口中預(yù)設(shè)的“保存”按鈕被被點(diǎn)擊時,則保存該生成的圖像。
[0038]在一個實(shí)施例中,原生界面窗口的透明度為全透明,根據(jù)用戶界面定義生成原生界面窗口的步驟之后還包括:
[0039]創(chuàng)建與原生界面窗口對應(yīng)的紋理(Texture),根據(jù)創(chuàng)建的紋理重繪原生界面窗口。
[0040]在本實(shí)施例中,調(diào)用者為圖形應(yīng)用程序。圖形應(yīng)用程序即為需要用到操作系統(tǒng)圖像API的應(yīng)用程序,例如游戲、三維仿真等。圖形應(yīng)用程序可通過Direct3D(微軟公司發(fā)布的3D圖形處理API規(guī)范)或OpenGL (Open Graphics Library, 一種跨平臺2D/3D圖形處理API規(guī)范)繪制用戶界面的紋理(紋理也稱紋理貼圖,表示物體表面細(xì)節(jié)的一幅或幾幅二維圖形,當(dāng)把紋理按照特定的方式映射到物體表面上的時候能使物體看上去更加真實(shí))。
[0041]通常情況下,圖形應(yīng)用程序需要以每秒多幀的形式連續(xù)繪制紋理,從而保證動畫效果的連續(xù)性。在本實(shí)施例中,應(yīng)用程序組件的用戶界面定義生成的原生界面窗口為GUI(Graphical User Interface,圖形用戶接口)界面。⑶I界面不需要對界面的內(nèi)容連續(xù)繪制,當(dāng)只有在接收到刷新指令時,才會對界面的內(nèi)容重新繪制。
[0042]由于原生界面窗口透明度為全透明(alpha值為0),展示出的顯示效果由創(chuàng)建的紋理決定,因此對原生界面窗口進(jìn)行紋理重繪可使原生界面窗口的界面風(fēng)格與調(diào)用者的出窗口的顯示風(fēng)格相似。而原生界面窗口上的界面組件依然可以用于獲取用戶參數(shù),因此創(chuàng)建與原生窗口對應(yīng)的紋理可在不影響應(yīng)用程序組件功能的情況下,使其顯示風(fēng)格與調(diào)用者—致。
[0043]在本實(shí)施例中,進(jìn)一步的,根據(jù)創(chuàng)建的紋理重繪原生界面窗口的步驟之前還包括:
[0044]獲取與原生界面窗口對應(yīng)的紋理,獲取紋理對應(yīng)的設(shè)備上下文,在獲取到的設(shè)備上下文中繪制原生界面窗口內(nèi)容。
[0045]設(shè)備上下文即DC (Device Context),為包含設(shè)備信息的結(jié)構(gòu)體,包括對Bitmap的描述。設(shè)備上下文即為應(yīng)用程序中進(jìn)行用戶界面繪制的畫布。Gn應(yīng)用程序在更新某一窗口的界面元素時,可通過將更新的界面內(nèi)容繪制到該窗口對應(yīng)的設(shè)備上下文即可實(shí)現(xiàn)更新。
[0046]在本實(shí)施例中,當(dāng)原生界面窗口的顯示元素需要更新時,例如,處理完畢顯示處理結(jié)果時,可獲取已創(chuàng)建的紋理的設(shè)備上下文,然后將需要更新的原生界面窗口繪制到與該紋理對應(yīng)的設(shè)備上下文中。該紋理對應(yīng)的設(shè)備上下文得到重繪則意味著該紋理得到相應(yīng)的更新。負(fù)責(zé)連續(xù)重繪原生界面窗口的紋理的線程或進(jìn)程則可根據(jù)該更新后的紋理連續(xù)重繪窗P。
[0047]在本實(shí)施例中,可通過事件監(jiān)聽機(jī)制觸發(fā)在與紋理對應(yīng)的設(shè)備上下文中繪制原生界面窗口內(nèi)容的步驟。
[0048]例如,在windows操作系統(tǒng)中,可通過⑶I界面中的Onpaint函數(shù)監(jiān)聽界面更新指令(當(dāng)界面元素更新時,會向windows消息隊(duì)列發(fā)送重繪指令,消息隊(duì)列拋出搞指令觸發(fā)Onpaint函數(shù))。當(dāng)Opaint函數(shù)被觸發(fā)時,可通過向紋理重繪進(jìn)程請求原生界面窗口的紋理,然后通過GetDC函數(shù)獲取該紋理的DC,并根據(jù)Onpait函數(shù)的參數(shù)將更新的界面顯示內(nèi)容繪制到該DC上。繪制完成后,通過調(diào)用ReleaseDC函數(shù)釋放該DC。紋理重繪進(jìn)程即可根據(jù)該重繪的DC重新連續(xù)繪制原生界面窗口。
[0049]本實(shí)施例中,紋理重繪進(jìn)程連續(xù)重繪界面的過程與更新紋理對應(yīng)的DC的過程為異步調(diào)用,因此,更新紋理對應(yīng)的DC的過程不會影響到顯示幀數(shù)(也就是常見的“卡”)。而更新紋理對應(yīng)的DC的過程通過GetDC得到DC并更新完成后才由ReleaseDC函數(shù)同步到紋理中,因此使得最終顯示的紋理為完整的界面,不會出現(xiàn)花屏。
[0050]在一個實(shí)施例中,根據(jù)用戶界面定義生成原生界面窗口的步驟之后可通過預(yù)設(shè)的通信接口獲取處理結(jié)果。
[0051]在一個實(shí)施例中,通信接口為socket接口。應(yīng)用程序組件可通過socket將處理結(jié)果發(fā)送給調(diào)用者。
[0052]在另一個實(shí)施例中,通信接口為共享文件。應(yīng)用程序組件可將處理結(jié)果寫入到指定的共享文件中,調(diào)用者可通過讀取該共享文件獲取處理結(jié)果。
[0053]在一個實(shí)施例中,如圖2所示,一種調(diào)用應(yīng)用程序組件的裝置,包括:請求獲取模塊102、動態(tài)鏈接庫獲取模塊104和組件調(diào)用模塊106,其中:
[0054]請求獲取模塊102,用于獲取組件調(diào)用請求。
[0055]組件調(diào)用請求即通知應(yīng)用程序調(diào)用應(yīng)用程序組件的請求。組建調(diào)用請求中可包含應(yīng)用程序組件標(biāo)識,用于區(qū)分需要調(diào)用的應(yīng)用程序組件。
[0056]在一個實(shí)施例中,請求獲取模塊102可用于獲取根據(jù)輸入指令生成的組件調(diào)用請求。例如,應(yīng)用程序的用戶界面上可設(shè)置按鍵。當(dāng)檢測到該按鍵被觸發(fā)時,則會產(chǎn)生相應(yīng)的輸入指令,并根據(jù)輸入指令生成組件調(diào)用請求。
[0057]在一個實(shí)施例中,請求獲取模塊102還可用于根據(jù)函數(shù)調(diào)用的返回結(jié)果獲取組建調(diào)用請求。應(yīng)用程序在運(yùn)行過程中,通過函數(shù)調(diào)用得到需要調(diào)用的應(yīng)用程序組件的標(biāo)識,可根據(jù)該應(yīng)用程序組件標(biāo)識生成組件調(diào)用請求。
[0058]也就是說,應(yīng)用程序既可根據(jù)觸發(fā)輸入指令生成組建調(diào)用請求來調(diào)用應(yīng)用程序組件,也可根據(jù)自身運(yùn)行的需要生成組建調(diào)用請求來調(diào)用應(yīng)用程序組件。
[0059]動態(tài)鏈接庫獲取模塊104,用于獲取與組件調(diào)用請求對應(yīng)的動態(tài)鏈接庫文件,動態(tài)鏈接庫文件包括庫函數(shù)和用戶界面定義。[0060]動態(tài)鏈接庫文件可以是windows平臺中的.dll文件,也可以是Iinux平臺下的.so文件,也可以是java平臺下的.jar文件。將代碼打包成動態(tài)鏈接庫文件可以方便應(yīng)用程序調(diào)用。用戶界面定義為用于定義用戶界面的代碼集合,包括用于定義用戶界面的類文件和資源文件。
[0061]動態(tài)鏈接庫在操作系統(tǒng)中注冊有動態(tài)鏈接庫標(biāo)識。在一個實(shí)施例中,組建調(diào)用請求中包括應(yīng)用程序組件標(biāo)識,應(yīng)用程序組件標(biāo)識對應(yīng)動態(tài)鏈接庫標(biāo)識。動態(tài)鏈接庫獲取模塊104可用于根據(jù)動態(tài)鏈接庫標(biāo)識獲取對應(yīng)的動態(tài)鏈接庫文件。
[0062]在一個實(shí)施例中,如圖3所示,調(diào)用應(yīng)用程序組件的裝置還包括動態(tài)鏈接庫創(chuàng)建模塊108,用于獲取應(yīng)用程序組件對應(yīng)的代碼,代碼包括庫函數(shù)文件、用戶界面定義文件;根據(jù)代碼生成動態(tài)鏈接庫文件。
[0063]通常情況下,應(yīng)用程序的代碼包括數(shù)據(jù)處理部分(庫函數(shù))和界面顯示部分(用戶界面定義)。也就是說,在將應(yīng)用程序組件化時,動態(tài)鏈接庫創(chuàng)建模塊108可用于將該應(yīng)用程序的代碼整體打包成動態(tài)鏈接庫文件(若打包成可執(zhí)行文件則可直接運(yùn)行),而不是僅僅提取其中的部分庫函數(shù)打包成動態(tài)鏈接庫文件。
[0064]組件調(diào)用模塊106,用于根據(jù)動態(tài)鏈接庫文件調(diào)用應(yīng)用程序組件。
[0065]組件調(diào)用模塊106可用于載入動態(tài)鏈接庫文件,加載其中的庫函數(shù)文件和用戶界面定義文件,根據(jù)庫函數(shù)和用戶界面定義文件調(diào)用應(yīng)用程序組件。由于加載的動態(tài)鏈接庫文件中既包含庫函數(shù)文件,也包括用戶界面定義文件,因此,調(diào)用的應(yīng)用程序組件的過程就如同獨(dú)立運(yùn)行應(yīng)用程序組件,而其啟動過程由調(diào)用者(調(diào)用應(yīng)用程序組件的應(yīng)用程序)觸發(fā)。
[0066]在一個實(shí)施例中,組件調(diào)用模塊106還可用于根據(jù)用戶界面定義生成原生界面窗口,通過原生界面窗口獲取輸入?yún)?shù),根據(jù)輸入?yún)?shù)通過調(diào)用庫函數(shù)生成處理結(jié)果。
[0067]原生界面窗口中的用戶界面由被調(diào)用的應(yīng)用程序組件的動態(tài)鏈接庫文件中的用戶界面定義生成。原生界面窗口中可包括文本框、下拉框、多選框等多個文本輸入組件、也可以包括鼠標(biāo)點(diǎn)擊監(jiān)聽器、鼠標(biāo)位置監(jiān)聽器、鍵盤操作監(jiān)聽器等多個用于檢測用戶輸入的事件觸發(fā)組件。原生界面窗口即可通過文本輸入組件、事件觸發(fā)組件等界面組件獲取輸入?yún)?shù)。組件調(diào)用模塊106可用于將輸入?yún)?shù)傳遞給庫函數(shù)進(jìn)行函數(shù)調(diào)用,根據(jù)函數(shù)的返回值生成處理結(jié)果。
[0068]例如,圖像編輯組件的用戶界面定義中包含了鼠標(biāo)點(diǎn)擊監(jiān)聽器、鼠標(biāo)位置監(jiān)聽器。可檢測鼠標(biāo)的點(diǎn)擊和拖動軌跡??蓪⑹髽?biāo)點(diǎn)擊和拖動涉及的坐標(biāo)作為參數(shù)傳遞給用于生成圖像的庫函數(shù),庫函數(shù)即可生成相應(yīng)的圖像。當(dāng)鼠標(biāo)點(diǎn)擊監(jiān)聽器檢測到原生界面窗口中預(yù)設(shè)的“保存”按鈕被被點(diǎn)擊時,則保存該生成的圖像。
[0069]在一個實(shí)施例中,原生界面窗口的透明度為全透明。如圖3所示,調(diào)用應(yīng)用程序組件的裝置還包括紋理重繪模塊110,用于創(chuàng)建與原生界面窗口對應(yīng)的紋理(Texture),根據(jù)創(chuàng)建的紋理重繪原生界面窗口。
[0070]在本實(shí)施例中,調(diào)用者為圖形應(yīng)用程序。圖形應(yīng)用程序即為需要用到操作系統(tǒng)圖像API的應(yīng)用程序,例如游戲、三維仿真等。紋理重繪模塊110可用于通過Direct3D(微軟公司發(fā)布的3D圖形處理API規(guī)范)或OpenGL (Open Graphics Library, 一種跨平臺2D/3D圖形處理API規(guī)范)繪制用戶界面的紋理(紋理也稱紋理貼圖,表示物體表面細(xì)節(jié)的一幅或幾幅二維圖形,當(dāng)把紋理按照特定的方式映射到物體表面上的時候能使物體看上去更加真實(shí))。
[0071]通常情況下,圖形應(yīng)用程序需要以每秒多幀的形式連續(xù)繪制紋理,從而保證動畫效果的連續(xù)性。在本實(shí)施例中,應(yīng)用程序組件的用戶界面定義生成的原生界面窗口為GUI(Graphical User Interface,圖形用戶接口)界面。⑶I界面不需要對界面的內(nèi)容連續(xù)繪制,當(dāng)只有在接收到刷新指令時,才會對界面的內(nèi)容重新繪制。
[0072]由于原生界面窗口透明度為全透明(alpha值為O ),展示出的顯示效果由創(chuàng)建的紋理決定,因此對原生界面窗口進(jìn)行紋理重繪可使原生界面窗口的界面風(fēng)格與調(diào)用者的出窗口的顯示風(fēng)格相似。而原生界面窗口上的界面組件依然可以用于獲取用戶參數(shù),因此創(chuàng)建與原生窗口對應(yīng)的紋理可在不影響應(yīng)用程序組件功能的情況下,使其顯示風(fēng)格與調(diào)用者—致。
[0073]在本實(shí)施例中,進(jìn)一步的,如圖3所示,調(diào)用應(yīng)用程序組件的裝置還包括紋理更新模塊112,用于獲取與原生界面窗口對應(yīng)的紋理,獲取紋理對應(yīng)的設(shè)備上下文,在獲取到的設(shè)備上下文中繪制原生界面窗口內(nèi)容。
[0074]設(shè)備上下文即DC (Device Context),為包含設(shè)備信息的結(jié)構(gòu)體,包括對Bitmap的描述。設(shè)備上下文即為應(yīng)用程序中進(jìn)行用戶界面繪制的畫布。Gn應(yīng)用程序在更新某一窗口的界面元素時,可通過將更新的界面內(nèi)容繪制到該窗口對應(yīng)的設(shè)備上下文即可實(shí)現(xiàn)更新。
[0075]在本實(shí)施例中,當(dāng)原生界面窗口的顯示元素需要更新時,例如,處理完畢顯示處理結(jié)果時,紋理更新模塊112可用于獲取已創(chuàng)建的紋理的設(shè)備上下文,然后將需要更新的原生界面窗口繪制到與該紋理對應(yīng)的設(shè)備上下文中。該紋理對應(yīng)的設(shè)備上下文得到重繪則意味著該紋理得到相應(yīng)的更新。負(fù)責(zé)連續(xù)重繪原生界面窗口的紋理的線程或進(jìn)程則可根據(jù)該更新后的紋理連續(xù)重繪窗口。
[0076]在本實(shí)施例中,可通過事件監(jiān)聽機(jī)制觸發(fā)紋理更新模塊112在與紋理對應(yīng)的設(shè)備上下文中繪制原生界面窗口內(nèi)容。
[0077]例如,在windows操作系統(tǒng)中,可通過⑶I界面中的Onpaint函數(shù)監(jiān)聽界面更新指令(當(dāng)界面元素更新時,會向windows消息隊(duì)列發(fā)送重繪指令,消息隊(duì)列拋出搞指令觸發(fā)Onpaint函數(shù))。當(dāng)Opaint函數(shù)被觸發(fā)時,可通過向紋理重繪進(jìn)程請求原生界面窗口的紋理,然后通過GetDC函數(shù)獲取該紋理的DC,并根據(jù)Onpait函數(shù)的參數(shù)將更新的界面顯示內(nèi)容繪制到該DC上。繪制完成后,通過調(diào)用ReleaseDC函數(shù)釋放該DC。紋理重繪進(jìn)程即可根據(jù)該重繪的DC重新連續(xù)繪制原生界面窗口。
[0078]本實(shí)施例中,紋理重繪模塊110連續(xù)重繪界面的過程與紋理更新模塊112更新紋理對應(yīng)的DC的過程為異步調(diào)用,因此,更新紋理對應(yīng)的DC的過程不會影響到顯示幀數(shù)(也就是常見的“卡”)。而更新紋理對應(yīng)的DC的過程通過GetDC得到DC并更新完成后才由ReleaseDC函數(shù)同步到紋理中,因此使得最終顯示的紋理為完整的界面,不會出現(xiàn)花屏。
[0079]需要說明的是,紋理重繪模塊110可設(shè)置于調(diào)用者中,紋理更新模塊112可設(shè)置于應(yīng)用程序組件中。動態(tài)鏈接庫創(chuàng)建模塊108可在將應(yīng)用程序組件化時,將紋理更新模塊112集成在動態(tài)鏈接庫中。
[0080]在一個實(shí)施例中,如圖3所示,調(diào)用應(yīng)用程序組件的裝置還包括數(shù)據(jù)通信模塊114,用于通過預(yù)設(shè)的通信接口獲取處理結(jié)果。
[0081 ] 在一個實(shí)施例中,通信接口為socket接口。數(shù)據(jù)通信模塊114可用于通過socket將處理結(jié)果發(fā)送給調(diào)用者。
[0082]在另一個實(shí)施例中,通信接口為共享文件。數(shù)據(jù)通信模塊114可用于將處理結(jié)果寫入到指定的共享文件中,調(diào)用者可通過讀取該共享文件獲取處理結(jié)果。
[0083]上述調(diào)用應(yīng)用程序組件的方法和裝置,由于調(diào)用的應(yīng)用程序組件對應(yīng)的動態(tài)鏈接庫中已包含了庫函數(shù)和用戶界面定義,因此作為調(diào)用者的應(yīng)用程序無需預(yù)先為應(yīng)用程序組件定義一套用戶界面。整個集成過程的代碼量較小,使得開發(fā)任務(wù)較少,從而提高了開發(fā)效率。
[0084]本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計(jì)算機(jī)可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory, ROM)或隨機(jī)存儲記憶體(Random AccessMemory, RAM)等。
[0085]以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
【權(quán)利要求】
1.一種調(diào)用應(yīng)用程序組件的方法,包括: 獲取組件調(diào)用請求; 獲取與所述組件調(diào)用請求對應(yīng)的動態(tài)鏈接庫文件,所述動態(tài)鏈接庫文件包括庫函數(shù)和用戶界面定義; 根據(jù)所述動態(tài)鏈接庫文件調(diào)用應(yīng)用程序組件。
2.根據(jù)權(quán)利要求1所述的調(diào)用應(yīng)用程序組件的方法,其特征在于,所述方法還包括: 獲取應(yīng)用程序組件對應(yīng)的代碼,所述代碼包括庫函數(shù)文件、用戶界面定義文件; 根據(jù)所述代碼生成動態(tài)鏈接庫文件。
3.根據(jù)權(quán)利要求1所述的調(diào)用應(yīng)用程序組件的方法,其特征在于,所述根據(jù)所述動態(tài)鏈接庫文件調(diào)用應(yīng)用程序組件的步驟為: 根據(jù)所述用戶界面定義生成原生界面窗口 ; 通過所述原生界面窗口獲取輸入?yún)?shù); 根據(jù)所述輸入?yún)?shù)通過調(diào)用所述庫函數(shù)生成處理結(jié)果。
4.根據(jù)權(quán)利要求3所述的調(diào)用應(yīng)用程序組件的方法,其特征在于,所述原生界面窗口的透明度為全透明; 所述根據(jù)所述用戶界面定義生成原生界面窗口的步驟之后還包括: 創(chuàng)建與所述原生界面窗口對應(yīng)的紋理; 根據(jù)所述創(chuàng)建的紋理重繪所述原生界面窗口。
5.根據(jù)權(quán)利要求4所述的調(diào)用應(yīng)用程序組件的方法,其特征在于,所述根據(jù)所述創(chuàng)建的紋理重繪所述原生界面窗口的步驟之前還包括: 獲取與所述原生界面窗口對應(yīng)的紋理; 獲取所述紋理對應(yīng)的設(shè)備上下文; 在所述獲取到的設(shè)備上下文中繪制所述原生界面窗口內(nèi)容。
6.根據(jù)權(quán)利要求3至5任一項(xiàng)所述的調(diào)用應(yīng)用程序組件的方法,其特征在于,所述根據(jù)所述用戶界面定義生成原生界面窗口的步驟之后還包括: 通過預(yù)設(shè)的通信接口獲取處理結(jié)果。
7.一種調(diào)用應(yīng)用程序組件的裝置,其特征在于,包括: 請求獲取模塊,用于獲取組件調(diào)用請求; 動態(tài)鏈接庫獲取模塊,用于獲取與所述組件調(diào)用請求對應(yīng)的動態(tài)鏈接庫文件,所述動態(tài)鏈接庫文件包括庫函數(shù)和用戶界面定義; 組件調(diào)用模塊,用于根據(jù)所述動態(tài)鏈接庫文件調(diào)用應(yīng)用程序組件。
8.根據(jù)權(quán)利要求7所述的調(diào)用應(yīng)用程序組件的裝置,其特征在于,所述裝置還包括動態(tài)鏈接庫創(chuàng)建模塊,用于獲取應(yīng)用程序組件對應(yīng)的代碼,所述代碼包括庫函數(shù)文件、用戶界面定義文件,根據(jù)所述代碼生成動態(tài)鏈接庫文件。
9.根據(jù)權(quán)利要求7所述的調(diào)用應(yīng)用程序組件的裝置,其特征在于,所述組件調(diào)用模塊還用于根據(jù)所述用戶界面定義生成原生界面窗口,通過所述原生界面窗口獲取輸入?yún)?shù),根據(jù)所述輸入?yún)?shù)通過調(diào)用所述庫函數(shù)生成處理結(jié)果。
10.根據(jù)權(quán)利要求9所述的調(diào)用應(yīng)用程序組件的裝置,其特征在于,所述原生界面窗口的透明度為全透明;所述裝置還包括紋理重繪模塊,用于創(chuàng)建與所述原生界面窗口對應(yīng)的紋理,根據(jù)所述創(chuàng)建的紋理重繪所述原生界面窗口。
11.根據(jù)權(quán)利要求10所述的調(diào)用應(yīng)用程序組件的裝置,其特征在于,所述裝置還包括紋理更新模塊,用于獲取與所述原生界面窗口對應(yīng)的紋理,獲取所述紋理對應(yīng)的設(shè)備上下文,在所述獲取到的設(shè)備上下文中繪制所述原生界面窗口內(nèi)容。
12.根據(jù)權(quán)利要求9至11任一項(xiàng)所述的調(diào)用應(yīng)用程序組件的裝置,其特征在于,所述裝置還包括數(shù)據(jù)通信模塊,用于通過預(yù)設(shè)的通信接口獲取處理結(jié)果。
【文檔編號】G06F9/44GK103677777SQ201210349243
【公開日】2014年3月26日 申請日期:2012年9月19日 優(yōu)先權(quán)日:2012年9月19日
【發(fā)明者】黃淵, 吳永堅(jiān), 黃飛躍 申請人:騰訊科技(深圳)有限公司