新聞中心

        EEPW首頁(yè) > 手機(jī)與無(wú)線通信 > 設(shè)計(jì)應(yīng)用 > 基于COM的輕量級(jí)組件技術(shù)的簡(jiǎn)單實(shí)現(xiàn)

        基于COM的輕量級(jí)組件技術(shù)的簡(jiǎn)單實(shí)現(xiàn)

        作者: 時(shí)間:2010-09-01 來(lái)源:網(wǎng)絡(luò) 收藏

        2.1 管理的功能

        Com庫(kù)中可維護(hù)兩個(gè)鏈表,分別用于存放插件DLL的信息和接口信息。

        每次使用Com庫(kù)加載的DLL信息都將記錄到插件鏈表中。在為用戶創(chuàng)建接口前,還需要查詢插件鏈表,以判斷該插件是否已經(jīng)被加載,如已加載,便可直接使用,不需要重新加載,這樣可以節(jié)省系統(tǒng)開(kāi)銷。由于在應(yīng)用中加載的插件數(shù)目有限,因此,查詢鏈表花費(fèi)的時(shí)間代價(jià)可以忽略,圖4所示為存放插件信息的結(jié)構(gòu)。其中CLASS_TABLE結(jié)構(gòu)存放插件DLL的信息。接口鏈表可用來(lái)保存成功返回給用戶的插件接口。用戶申請(qǐng)接口時(shí),Com庫(kù)先在接口鏈表中查找該接口,如果已經(jīng)存在,則直接返回,這樣可以節(jié)省創(chuàng)建接口的時(shí)間,也可以有效地控制接口對(duì)象的數(shù)目。

        圖5所示是CIMPL結(jié)構(gòu)用于存放插件接口的信息。

        釋放這兩個(gè)鏈表的過(guò)程就是釋放資源的過(guò)程。在標(biāo)準(zhǔn)中,資源管理是通過(guò)一個(gè)由接口自己負(fù)責(zé)的資源計(jì)數(shù)器完成的。在中,根據(jù)應(yīng)用需要,每個(gè)接口只需要一個(gè)接口指針,而不需要資源計(jì)數(shù)器,釋放資源的任務(wù)由Com庫(kù)完成。當(dāng)應(yīng)用程序關(guān)閉時(shí),可將兩個(gè)資源鏈表中的接口對(duì)象刪除,并將組件DLL/SO卸載。

        2.2 創(chuàng)建插件接口指針

        Com庫(kù)的核心功能就是創(chuàng)建組件接口指針。

        創(chuàng)建組件接口指針的函數(shù)為CoCreateInstance,它具有圖6所示的三個(gè)參數(shù)。其創(chuàng)建過(guò)程如圖7所示。



        2.3 ExtensionSystem靜態(tài)庫(kù)

        ExtensionSystem靜態(tài)庫(kù)中已加載了Com庫(kù),并將Com庫(kù)的創(chuàng)建接口指針函數(shù)封裝成接口。這樣,客戶端在使用時(shí),就不需要關(guān)注Com庫(kù)的具體位置,而可以直接調(diào)用ExtensionSystem的接口來(lái)獲取插件接口指針。



        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 峡江县| 嵊州市| 万荣县| 长泰县| 新源县| 永寿县| 怀宁县| 额敏县| 东宁县| 钟祥市| 桃园市| 积石山| 临泽县| 中超| 班戈县| 富民县| 昆明市| 保靖县| 驻马店市| 龙州县| 克山县| 金川县| 尤溪县| 寿阳县| 定西市| 海林市| 施甸县| 喀喇沁旗| 雅江县| 霍邱县| 龙里县| 延长县| 北宁市| 象州县| 尼木县| 稻城县| 水富县| 奉节县| 杂多县| 淳化县| 安顺市|