• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            franksunny的個(gè)人技術(shù)空間
            獲得人生中的成功需要的專注與堅(jiān)持不懈多過天才與機(jī)會(huì)。 ——C.W. Wendte

             

            DLLDynamic Link Library)是一段特殊的代碼,它能夠被外部程序在程序運(yùn)行的時(shí)候調(diào)用。在DLL里面的代碼可以同時(shí)被許多外部程序共享,而且不會(huì)引起手機(jī)內(nèi)存的重復(fù)分配。

             

            DLL根據(jù)接口的類型Symbian系統(tǒng)支持兩種類型的DLL:靜態(tài)接口DLL和多態(tài)接口DLL

            靜態(tài)接口DLL主調(diào)程序啟動(dòng)的時(shí)候被系統(tǒng)自動(dòng)載入到手機(jī)內(nèi)存里面(唯一的例外是如果該DLL是在ROM只讀存儲(chǔ)器里面,那么可以直接通過它的地址進(jìn)行調(diào)用)。并且如果沒有外部程序使用它了,它將被自動(dòng)的從內(nèi)存中卸載。靜態(tài)接口DLL在系統(tǒng)內(nèi)提供了一系列唯一的函數(shù)(例如,兩個(gè)具有相同導(dǎo)出函數(shù)的DLL在系統(tǒng)中也不會(huì)混淆)。靜態(tài)接口DLL具有.dll文件后綴,通常用于在Symbian系統(tǒng)中實(shí)現(xiàn)應(yīng)用程序引擎(例如,與UI無關(guān)的代碼)。

             

            多態(tài)接口DLL是只帶一個(gè)單獨(dú)導(dǎo)出函數(shù)的普通DLL,一般都是通過調(diào)用RLibrary::Load()函數(shù)才能被載入到內(nèi)存中,而且在卸載的時(shí)候,也最好通過RLibrary::Close()函數(shù)進(jìn)行卸載。多個(gè)多態(tài)接口DLL可以為外部程序?qū)С龆鄠€(gè)相同函數(shù)名的函數(shù)。所以,這種DLL通常情況下被廣泛應(yīng)用于實(shí)現(xiàn)某個(gè)應(yīng)用程序框架功能擴(kuò)展時(shí)候的插件。在Symbian系統(tǒng)中,多態(tài)接口DLL可以有多種不同的文件后綴。其中最著名的一個(gè)就是.app結(jié)尾的(應(yīng)用程序),.ldd(邏輯設(shè)備驅(qū)動(dòng)),.tsy.csy(電話和通信服務(wù)模塊)等等。。。

             

            在本文中,我們將只關(guān)注靜態(tài)接口DLL技術(shù),它是你我在開發(fā)中最最常用的DLL類型。我們將以通用DLL的繼續(xù)我們的內(nèi)容。

            靜態(tài)接口的DLL

            DLL調(diào)用者的角度來看,DLL有三個(gè)文件組成:

            1)頭文件:.h的文件后綴,可以#include到主調(diào)程序的代碼中去,只有在編譯

            的時(shí)候有用。

            2)導(dǎo)出文件:.lib的文件后綴,可以由主調(diào)程序進(jìn)行鏈接,這個(gè)文件記載了DLL的提供的所有接口函數(shù)名稱和地址。(arm版本中應(yīng)該是dso后綴

            3DLL文件本身:.dll的文件后綴包括所有.lib文件記載的接口函數(shù)的具體實(shí)現(xiàn),主調(diào)函數(shù)在運(yùn)行的時(shí)候?qū)嶋H調(diào)用和執(zhí)行的部分。

             

            DLL編寫者的角度來看,DLL可以被看成是一個(gè)完整的Symbian項(xiàng)目。它由以下幾部分組成:

            1)項(xiàng)目自己的MMP文件(在bld.inf文件中列出的)

            2)一個(gè)頭文件,指定了該DLL需要導(dǎo)出的接口

            3)源代碼文件,具體導(dǎo)出函數(shù)的實(shí)現(xiàn)

             

            頭文件

            DLL的頭文件與其它類的頭文件的頭文件非常類似。不同的地方在于使用了IMPORT_C宏來定義所有導(dǎo)出函數(shù)

            class CMyEngine : public CBase

            {

            public:

               // These functions are visible by the

               // clients of the DLL and needs to have

               // the IMPORT_C tag

               IMPORT_C static CMyEngine* NewL();

               IMPORT_C static CMyEngine* NewLC();

             

               IMPORT_C void MyPublicMethod();

               IMPORT_C void AnotherPublicMethod();

               ...

            private:

               // These functions are not visible by the

               // clients of the DLL and then do not need

               // the IMPORT_C tag

               CMyEngine();

               void ConstructL();

               void SomePrivateMethod();

            }

             

            實(shí)現(xiàn)文件

            編寫DLL工作本身沒有什么需要復(fù)雜的地方,但是有兩個(gè)重要的地方需要留意:

            1E32Dll()函數(shù)必須實(shí)現(xiàn)

            2另外一個(gè)特殊的宏,EXPORT_C,應(yīng)該加在每個(gè)導(dǎo)出函數(shù)實(shí)現(xiàn)的前面

            例如:

            // This function is mandatory for all DLLs

            EXPORT_C TInt E32Dll(TDllReason)

            {

                    return KErrNone;

            }

             

            // This function is exported: The EXPORT_C tag shall be used.

            EXPORT_C void MyPublicMethod()

            {

               ...

            }

             

            // This one is not: The EXPORT_C tag shall not be used.

            void SomePrivateMethod()

            {

              // Do Something

            }

             

            MMP文件

            DLLMMP文件應(yīng)該有以下特點(diǎn)

            1)定義項(xiàng)目(project)的類型是dll

            2)使用正確的UID2的值(0x1000008d)

            在開發(fā)過程中,你也應(yīng)該通過EXPORTUNFROZEN告訴編譯環(huán)境,DLL接口還沒有定稿,還可以隨時(shí)修改

            例如:

            TARGET        MyEngine.dll

            TARGETTYPE    dll

            UID           0x1000008d

            ...

            EXPORTUNFROZEN

             

            DLL接口定稿(Freezing DLL

            一旦你完成了DLL的開發(fā),在你發(fā)行你的DLL版本之前,應(yīng)該把接口定稿(Freezing)這樣可以確定將來發(fā)行的DLL可以向下兼容。

            通過將項(xiàng)目的MMP文件中的EXPORTUNFROZEN關(guān)鍵字去掉,用常規(guī)的方法重新建立DLL,來實(shí)現(xiàn)DLL庫的定稿。這時(shí)候會(huì)有“.def文件不存在”的編譯警告信息出現(xiàn),不要緊,繼續(xù)就建立當(dāng)前項(xiàng)目,在項(xiàng)目編譯完畢以后,你可以用如下命令定稿:

            abld freeze [platform]

            例如

             1bldmake   bldfiles;  

             2abld   build  gcce;  

             3abld   freeze gcce; 

            注意:

            這里通常有三個(gè)定稿的def文件夾:在二版本中編譯armi時(shí),用abld freeze armi產(chǎn)生的是BMARM文件夾和對(duì)應(yīng)的Def;在三版本中編譯gccearmV5時(shí)會(huì)產(chǎn)生EABI文件夾和對(duì)應(yīng)的Def;而用wins時(shí)則編譯產(chǎn)生BWINS文件夾和對(duì)應(yīng)的Def

            另外關(guān)于EXPORTUNFROZEN,有必要再啰嗦兩句:在沒加該關(guān)鍵字的時(shí)候,可以進(jìn)行接口定稿(即產(chǎn)生def文件),但是不能產(chǎn)生lib文件,如此在編譯包含該lib的工程中編譯mmp時(shí)會(huì)報(bào)lib文件找不到的錯(cuò)誤;加了EXPORTUNFROZEN就能產(chǎn)生lib文件,但是接口就已經(jīng)凍結(jié)了,這個(gè)時(shí)候再修改接口,新修改的接口就沒有被導(dǎo)引出來(個(gè)人總結(jié))。

            所有的ARM平臺(tái)共享一個(gè).def文件,但是對(duì)于wins模擬器和winscw CodeWarrior環(huán)境來說,他們有不同的.def文件。

            一旦項(xiàng)目已經(jīng)定稿,重新生成makefile,這時(shí)候?qū)氲?/span>lib會(huì)直接通過定稿的.def文件生成。



            本文很大一塊內(nèi)容屬于轉(zhuǎn)載別人的,但是今天發(fā)布本文是找不到鏈接了,個(gè)人只是驗(yàn)證了下,為下篇EasyDgm使用做下預(yù)備知識(shí)
            posted on 2008-05-16 20:10 frank.sunny 閱讀(4644) 評(píng)論(0)  編輯 收藏 引用 所屬分類: symbian 開發(fā)

            常用鏈接

            留言簿(13)

            隨筆分類

            個(gè)人其它博客

            基礎(chǔ)知識(shí)鏈接

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久国产乱子伦精品免费强| 久久精品18| 91精品国产高清久久久久久国产嫩草| 99久久久精品| 久久婷婷五月综合国产尤物app| 久久午夜无码鲁丝片午夜精品| 欧美亚洲国产精品久久| 久久99精品综合国产首页| 国内精品伊人久久久影院| 久久精品国产影库免费看| 色婷婷综合久久久中文字幕| 久久中文精品无码中文字幕| 成人妇女免费播放久久久| 久久国产色av免费看| 久久国产精品二国产精品| 国产精品女同久久久久电影院| 国产成人综合久久精品红 | 久久久噜噜噜久久熟女AA片 | 亚洲第一永久AV网站久久精品男人的天堂AV | 久久精品国产99国产电影网| 一本久久a久久精品亚洲| 久久久久亚洲AV成人网人人网站 | 中文字幕精品久久| 国产精品一区二区久久精品无码| 国产成人精品久久一区二区三区| 久久精品国产99国产精品亚洲| 久久免费大片| 久久久久久噜噜精品免费直播| 91精品国产91久久久久久蜜臀| 久久国产色AV免费观看| 久久亚洲国产成人精品性色| 伊人久久大香线蕉av一区| 久久天天躁夜夜躁狠狠躁2022| 日本高清无卡码一区二区久久 | 午夜人妻久久久久久久久| 国产毛片欧美毛片久久久 | 久久久久成人精品无码| 精品国产婷婷久久久| 99热都是精品久久久久久| 久久精品视频免费| 99久久免费国产精品|