• <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的個人技術空間
            獲得人生中的成功需要的專注與堅持不懈多過天才與機會。 ——C.W. Wendte

             

            如何在CarBidesymbian 3rd版本下調試控制臺程序

             

            本人搭建的環境為ActivePerl-5.8.8.822 + jdk1.6.0_04 + Carbide.C++ V1.2 + S60-SDK-200634-3.1(FP1),至今環境沒有發現什么大問題,搭建完調試控制臺程序時發現問題——程序編譯能通過,但是一旦運行(Run)和調試(Debug)就沒有任何反應,后來上網查找解決方法:

             

            第一種方法

            X:\Symbian\9.1\S60_3rd_MR\Epoc32\Data下的epoc文件第一行加入textshell語句,保存后再運行simulator就會出現控制臺界面。

            在控制臺界面下敲入:cd private 進入private文件夾,再輸入要運行的程序的文件名(例如:engine),用console類輸出的語句就會能顯示出來。

            如果要切換回GUI界面,在textshell前加上#就表示被注釋掉了,再次運行simulator就是GUI界面羅:)

            注:該方法出現的控制臺界面與Dos環境一樣,但是本人沒有調試運行成功,因為編譯之后的路徑壓根就不在“\Epoc32\winscw”而在“\Epoc32\release\winscw\udeb”從Dos的角度看,這種情況下只有外部將*.Exe文件拷貝過去才可以用,但是拷貝之后類似Dos下執行說是未發現文件。至此該方法被我中斷。

             

            第二種方法:

            (1)編譯控制臺(Console)程序程序。控制臺(Console)程序例子的路徑: D:\Symbian\9.2\S60_3rd_FP1\Examples\Basics\HelloWorld,在cmd命令提示符中進入對應的路徑,輸入bldmake bldfiles1~2秒后,該命令完成,無任何輸出。

            輸出以下命令進行編譯和鏈接:abld build winscw udeb

            編譯后生成的exe文件在D:\Symbian\9.2\S60_3rd_FP1\Epoc32\release\winscw\udeb下。

             

            (2)cmd命令提示符中進入D:\Symbian\9.2\S60_3rd_FP1\Epoc32\release\winscw\udeb,輸出以下命令運行對應的程序

            HelloWorld.exe

            仿真器出現,自動運行這個控制臺(Console)程序HelloWorld

             

            注:該方法是可以執行,但是如果沒有像第一種方法那樣在“epoc.ini”文件中設置“textshell”那么出現的控制臺在12秒之后就退出了進入GUI環境,另就算按第一種方法修改了“epoc.ini”文件,程序只有執行功能沒有調試功能。

             

            第三種方法:

            1、為Console程序添加一個Registration RSS文件。比如: MyConsoleApp_reg.rss,其內容如下:

            #include <appinfo.rh>

            UID2 KUidAppRegistrationResourceFile

            UID3 0xA20001EB        // 修改這個,改為與mmp文件相匹配的UID3

             

            RESOURCE APP_REGISTRATION_INFO

                {

                app_file="MyConsoleApp";        // 修改應用程序名稱

                embeddability=KAppNotEmbeddable;

                }

             

            2、修改mmp文件,添加下述內容:

            START RESOURCE MyConsoleApp_reg.rss //該文件名就是上面1修改的注冊資源文件

            #ifdef WINSCW

            TARGETPATH \private\10003a3f\apps      //如果只是調試只有這個路徑就可以了

            #else

            TARGETPATH \private\10003a3f\import\apps

            #endif

            END //RESOURCE

             

            3、編譯,運行。

             

            注:該方法既能運行也能調試,而且不用修改“epoc.ini”文件,主要是產生如上效果相對繁瑣點。

             

            另外在這里由于有很多別人編輯的程序,可能沒有bld.inf文件只有*.mmp文件,這時在Carbide C++ v1.2下導入時,必須自己編寫一個bld.inf文件。至于如何編寫bld.inf文件,下面給出兩篇文檔,可以作為基礎知識點。

             

             

            bld.inf.mmp.pkg文件淺析

            http://blog.csdn.net/btooth/archive/2006/06/24/829333.aspx

            時間: 2006-07-30  來自:風生水起  

             

            對于每一個項目,都必須有一個工程引導文件bld.inf和一個項目定義文件.mmpbld.inf文件可能引用一個或多個.mmp文件,每個.mmp文件對應一個將要生成的組件

            一、工程引導文件bld.inf

            其實是一個腳本,它告訴build環境在做build之前需要準備或知道一些什么東西,最普通的寫法是:

            PRJ_MMPFILES

            HelloWorld.mmp

            這是告訴build環境,你馬上要處理的工程文件名字叫HelloWorld.mmp

            如果做比較復雜的程序可能需要同時build所有的庫,那么就在這里把你所有需要build的工程都列出來:

            PRJ_MMPFILES

            Project.mmp

            Project_lib1.mmp

            Project_lib2.mmp

            另外一個常用的標記是PRJ_PLATFORMS。它告訴編譯環境,以下的這些平臺(Targets)是需要編譯的。

            PRJ_PLATFORMS

            WINS ARMI WINSCW

            或者直接使用:

            PRJ_PLATFORMS

            DEFAULT

            注意:如果在bld.inf中不做PRJ_PLATFORMS標記,其效果相當于PRJ_PLATFORMS DEFAULT,也就是說這個標記不是必須的

            第三個常用標記是PRJ_EXPORTS它告訴編譯器在編譯之前需要把哪些文件先拷貝到指定位置。舉個例子,如果你的工程里面需要include一個第三方的*.inl文件,那么如果編譯之前這個文件不存在就會編譯不過,那么可以這樣寫:

            PRJ_EXPORTS

            .\nk_set.inl \epoc32\include

            那么,編譯時,一個perl腳本會首先把你工程目錄下的nk_set.inl文件拷貝到\epoc32\include目錄下,然后再編譯。

            大多數的bld.inf文家需要這三個標記就夠了,還有一點小技巧,就是可以在其中使用#if   else等東西,比如:

            #if defined(WINS)

            …….//注意沒有{ }

            else

            …….

            #endif

             

            二、項目定義文件.mmp

            這個文件的內容要比bld.inf文件復雜的多。

            先看一下HelloWorldbasic.mmp文件的內容:

            TARGET            HelloWorldBasic.app

            TARGETTYPE        app

            UID               0x100039CE 0x10005B91

            TARGETPATH        \system\apps\helloworldbasic

            SOURCEPATH        ..\src

            SOURCE            HelloWorldBasic.cpp

            SOURCE            HelloWorldBasicApplication.cpp

            SOURCE            HelloWorldBasicAppView.cpp

            SOURCE            HelloWorldBasicAppUi.cpp

            SOURCE            HelloWorldBasicDocument.cpp

            SOURCEPATH        ..\group

            RESOURCE          HelloWorldBasic.rss

            USERINCLUDE       ..\inc

            SYSTEMINCLUDE     \epoc32\include

            LIBRARY           euser.lib

            LIBRARY           apparc.lib

            LIBRARY           cone.lib

            LIBRARY           eikcore.lib 

            LIBRARY           avkon.lib 

            .mmp文件以平臺無關和編譯器無關的方法指定項目組件的屬性。

            1TARGET:應用程序的名稱,該名稱必須具有正確的文件擴展名:.exe.app.dll

            2TARGETTYPE:定義為app(該選項確定UID1的值),意味著這是一個GUI應用程序,還存在許多其他類型,包括dllexetsycsyldd

            3UID:指定GUI應用程序的唯一系統標志符。

            4TARGETPATH:最終生成的應用程序及其組件所在的位置,總是位于\system\apps\下面,該目錄相對于設備驅動器、模擬驅動盤(例如C:)或模擬ROMZ:)驅動盤的根目錄

            5SOURCEPATH:項目源文件的位置路徑。

            6LANG:若應用程序支持不同語言,則使用該語句。每種支持的語句具有兩位數字的代碼,例如01表示英語,02表示法語,03表示德語。

            7SOURCE:指定項目源文件的名稱。可以多次使用該語句,并且在每條語句上可以有多個文件名。

            8RESOURCE:指定資源文件。

            9USERINCLUDESYSTEMINCLUDE:指定應用程序特有的頭文件的位置。

            10LIBRARY:列出需要鏈接的應用程序框架和圖形庫――這些是對應于共享庫DLL.lib文件,將在運行時調用這些DLL函數。

            11AIF:指定應用程序信息文件(.aif),該文件包含應用程序資源文件中定義的圖標和其他應用程序屬性。

            針對于項目定義文件,我們看一下其中部分關鍵詞的詳細解釋:

            1 UID:全球唯一性標志符,由32位二進制數字構成。在symbian os中,通過UID類型標志對象,UID類型具有3個組件UIDUID1UID2UID3

            UID1:確定文件是文檔還是可執行碼,應將它看作一個系統級的標志符,用于區分可執行文件、DLL等文件。.mmp文件中的TARGETTYPE語句確定UID1

            UID2:對于文檔文件,UID2確定文檔類型(應用程序數據文件或.aif文件)。對于可執行代碼文件,UID2確定可執行文件的類型(.app.dll.tsy)。對于可執行文件,在.mmp文件中的UID行上指定UID2UID3。(UID不是很重要,可以考慮別從的類似文件拷一個過來,也可以隨便寫一個,目前我還沒有因為這個產生過錯誤,所以不用深究

            UID3:是一個應用程序級的標志符,應用程序的UID3必須不同于其他所有應用程序。只有symbian才可以發布這些值。通過電子郵件到symbian獲取,開發實驗時,可以使用0x01000000~0x0FFFFFFF,但發布時不能再使用。

            Symbian os使用UID將文檔(數據文件)和.aif文件與它們各自的應用程序關聯起來;UID3包含在每個數據文件、可執行文件或.aif文件的頭部。然而,可執行文件和它們的組件仍然需要具有正確的文件擴展名,否則它們將無法正確運行。

            當應用程序創建文檔文件時,應用程序框架將所有的3UID32位的檢查總數自動合并到頭文件的前16個字節。

            2AIF文件

            在運行時使用.aif文件,并且存儲關于應用程序的數據。包括:

            a、兩種大小的圖標

            b、各種功能,例如文檔嵌入、新文件的建立、是否隱藏應用程序以及MIME類型支持的優先級。

            c、可選地使用支持語言的應用程序標題(名稱)。

            如果沒有.aif文件,應用程序將使用默認的圖標、以應用程序名稱(省略擴展名)作為標題。

            圖標:

            網格和列表視圖使用42×29象素的圖標,然而狀態面板的上下文面板(當應用程序具有焦點時顯示在屏幕的頂部)使用44×44的圖標。

            提供不同的圖標大小有助于確保系統可以使用最合適的大小。如果只提供一種大小,那么顯示時就會縮放,損壞圖標質量。

            這種位圖文件格式稱為多重位圖文件格式(.mbm),有相應的工具Aifbuilder來設計這種位圖

            AIF文件本地化:

            如果應用程序根據不同的語言而提供不同的圖標,通過使用擴展名.axx保存產生的每個本地化.aif文件,其中xx是與適當地區關聯的兩位數字語言碼。

            標題:

            Series60 UI和應用程序框架Avkon提供了將標題和應用程序關聯的可選功能――相比于一般通過.aif文件提供標題的功能,應該優先使用這種功能。默認情況下,系統將使用.aif文件中的標題。然而,很可能應用程序創建一個單獨的標題文件,同時包含普通長度標題和簡短標題――簡短標題用于網格視圖,普通標題用于列表視圖。使用創建普通GUI資源文件的方法得到標題文件。對于HelloWorld項目,標題源文件是HelloWorld_caption.rss,在運行時使用二進制輸出文件為HelloWorld_caption.rsc。如果需要,可以為每種語言產生單獨的標題文件。

            通過將額外的行添加到應用程序的.mmp文件:

            RESOURCEHelloWorld_caption.rss

             

            三、.pkg文件

            pkg文件也就是安裝包配置文件,是制作Symbian OS安裝程序的核心部分。它包含了制作安裝文件所需要的全部信息。為了生成.sis文件,必須首先編寫.pkg文件。因此制作Symbian程序安裝文件的過程,實際上主要就是編寫pkg文件的過程。pkg文件像Symbian的資源文件一樣,有自己完整的語法體系,掌握了pkg文件的語法,就基本上掌握了制作安裝程序的大部分知識,所以熟悉pkg文件的結構,對于制作安裝程序來說,是非常重要的。

            舉例(HelloWorld.pkg):

            ;

            ; Installation file for HelloWorld application

            ;

            ;Languages

            &EN

            ;

            ; UID is the app's UID

            ;

            #{"HelloWorld"},(0x0D0A2843),1,0,0

            ;

            ;Supports Series 60 v 2.0

            ;This line indicates that this installation is for the Series 60 platform v2.0

            ;This line must appear _exactly_ as shown below in the sis file

            ;If this line is missing or incorrect, the sis file will not be able

            ;to be installed on Series 60 v2.0 platforms

            (0x101F7960), 0, 0, 0, {"Series60ProductID"}

            ;

            ; Four files to install

            ; Symbols set up for the source location are Carbide.c++ specific symbols

            "$(EPOCROOT)epoc32\release\$(PLATFORM)\$(TARGET)\HelloWorld.app"         -"!:\system\apps\HelloWorld\HelloWorld.app"

            "$(EPOCROOT)epoc32\data\z\system\apps\HelloWorld\HelloWorld.rsc"         -"!:\system\apps\HelloWorld\HelloWorld.rsc"

            "$(EPOCROOT)epoc32\data\z\system\apps\HelloWorld\HelloWorld_caption.rsc" -"!:\system\apps\HelloWorld\HelloWorld_caption.rsc"

            "$(EPOCROOT)epoc32\data\z\system\apps\HelloWorld\HelloWorld.aif"         -"!:\system\apps\HelloWorld\HelloWorld.aif"

            這個pkg文件是完整的,只要把文件目錄適當調整一下,就可以可以使用了。

            下面對這個文件的各個部分依次做一些解釋說明:

            以分號開始的行,是注釋。這些注釋主要是給開發人員看的,生成器會忽略它們。

            &EN,表示安裝程序使用的語言。EN表示使用美國英語,具體的代碼的意義可以在SDK中查到,這里不詳細列出。sis文件支持多語言安裝,可以在這里進行設置,比如,&EN,FR,IT,表示是多語言的。對于多語言的安裝程序,有一些語法和規則與其對應,具體的使用方法請查閱SDK。如果你只是希望可以做出一個安裝程序,那么使用&EN就可以,不過需要保證后面出現的字符串部分使用英文字母。

            #{"HelloWorld"},(0x0D0A2843),1,0,0這是標準Symbian SIS文件的頭部。所有的pkg都必須包含這行,而且必須在語言設置的后面。其中HelloWorld是程序的名字,在安裝過程中,可能會使用。0x0D0A2843,是所開發程序的UID,具體點說就是mmp文件中UID項的后面那個數字。接下來的數字,依次是主版本號,副版本號,和創建號,這些號碼用于安裝程序的版本控制

            (0x101F7960), 0, 0, 0, {"Series60ProductID"}這一句說明了這個程序在安裝之前需要準備的組件,實際上就是要求必須是Series60的平臺。如果還需要其它的組件,也需要在這里說明。0x101F7960,是組件的UID,它其實表示的是S60 2.0的平臺,對于S60 2.1的平臺,應該是0x101F9115000分別是主副版本號和創建號,Series60ProductID則是當需要顯示的時候用于向用戶顯示的說明文字。

            最后就是實際操作的語句了。第一個雙引號中的是文件的源位置,它指的是編譯后的文件在PC中的位置。你可以使用絕對位置,也可以像例子那樣使用相對位置。第二個雙引號中的是文件在目標機器中的位置。“!:”表示由用戶來選擇安裝在哪個驅動器下面,如果不想由用戶指定,可以使用“C:”,表示安裝在電話的C驅動下面。這兩行語句表示的意思就是將指定位置的文件復制到電話的指定位置中。還有很豐富的語法,請查看S60SDK

             

            以上文檔講的是第二版的東西,轉移到第三版之后,需要做一些修改,具體如何修改,諾基亞有一篇詳盡的文檔,文檔地址

            http://www.forum.nokia.com/info/sw.nokia.com/id/6190aad6-3b3b-4a6a-a53a-221e61c94248/S60_Platform_Porting_from_2nd_to_3rd_Edition_v1_1_en.pdf.html

            由于本人英語太差就不多做翻譯了。另網上有一篇某研究生翻譯的東東,雖然斷章取義但是如果E文太差,對照著E文看一下也不錯。

             

            另外第三版的UID有點新東西也在這里說明下:

            Symbain的程序主要是用UID標識的,在v9.0UIDs分為兩類,ProtectedUnprotected

            UID

            Class

            Range

            Purpose

            Protected Range

            0

            0x00000000 - 0x0FFFFFFF

            Development use only

            1

            0x10000000 - 0x1FFFFFFF

            Legacy UID allocations

            2

            0x20000000 - 0x2FFFFFFF

            V9 protected UID allocations

            3

            0x30000000 - 0x3FFFFFFF

            Reserved

            4

            0x40000000 - 0x4FFFFFFF

            Reserved

            5

            0x50000000 - 0x5FFFFFFF

            Reserved

            6

            0x60000000 - 0x6FFFFFFF

            Reserved

            7

            0x70000000 - 0x7FFFFFFF

            Vendor IDs.

            Unprotected Range

            8

            0x80000000 - 0x8FFFFFFF

            Reserved

            9

            0x90000000 - 0x9FFFFFFF

            Reserved

            A

            0xA0000000 - 0xAFFFFFFF

            V9 unprotected UID allocations

            B

            0xB0000000 - 0xBFFFFFFF

            Reserved

            C

            0xC0000000 - 0xCFFFFFFF

            Reserved

            D

            0xD0000000 - 0xDFFFFFFF

            Reserved

            E

            0xE0000000 - 0xEFFFFFFF

            Development use only

            F

            0xF0000000 - 0xFFFFFFFF

            Legacy UID compatibility range

            如果開發一些Symbian的項目,將來要簽名的使用Protected UID,程序必須簽名才能安裝在真機上。Unprotected可以用來做一些測試、教學程序。

            每個應用程序都有3UIDuid1用于表示Symbian OS平臺程序的類型:For EXE uid1 = 0x1000007A  For DLL&APP uid1 = 0x10000079For ECom Plugin 0x10009D8DUID2一般都去固定值0x100039CE,我也沒有弄清楚具體的作用。UID3標識應用程序。SID的取值和UID3一樣。VID一般都取默認的0UID都在程序的MMP中定義。

             

            posted on 2008-03-11 19:57 frank.sunny 閱讀(2521) 評論(0)  編輯 收藏 引用 所屬分類: symbian 開發

            常用鏈接

            留言簿(13)

            隨筆分類

            個人其它博客

            基礎知識鏈接

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲国产婷婷香蕉久久久久久| 亚洲国产精品无码久久98| 一本久久a久久精品vr综合| 日韩欧美亚洲国产精品字幕久久久| 99久久免费国产精精品| 日日噜噜夜夜狠狠久久丁香五月 | 色综合久久无码五十路人妻| 久久精品国产99国产精品| 久久精品综合一区二区三区| 久久久久婷婷| 久久亚洲国产成人影院| 亚洲国产小视频精品久久久三级 | 国产精品青草久久久久婷婷| 久久精品毛片免费观看| 国产精品久久久久久影院 | 亚洲精品蜜桃久久久久久| 一本色道久久HEZYO无码| 人妻久久久一区二区三区| 狠狠色丁香久久综合五月| 91精品国产高清久久久久久91 | 国产成人精品久久一区二区三区av| 青青草原综合久久大伊人精品| 国产免费久久精品丫丫| 中文精品99久久国产 | 精品国产青草久久久久福利| 亚洲中文字幕久久精品无码喷水 | 久久久噜噜噜久久中文福利| 99久久精品日本一区二区免费| 欧美久久综合性欧美| 中文字幕无码av激情不卡久久| 男女久久久国产一区二区三区| 国产99久久久国产精免费| 亚洲一级Av无码毛片久久精品| 久久精品国产亚洲av麻豆色欲| 久久e热在这里只有国产中文精品99| 久久久久久久综合狠狠综合| 久久99中文字幕久久| 国产精品久久久久久久app| 久久久久久免费一区二区三区| 亚洲日本久久久午夜精品| 色成年激情久久综合|