Symbian開發入門(VC 6.0)

來源:互聯網
上載者:User

引言:

3650使用的Symbian系統是以Nokai為首的各手機廠商合夥開發的一個作業系統,主要用於高端的智能手機。其開發語言為C++,可以使用Microsoft   Visual   C++   6.0作為整合化的開發環境,看來雖然Symbian的目標是跟微軟的SmartPhone較勁,在採取的手段和方法上卻也是不拘一格,微軟更是暗暗叫苦,誰讓當時vc6設計的這麼開放,結果被敵人拿去做武器了。本文主要針對的是Symbian開發入門,所以應該是非常簡單的事,因為畢竟Symbian的開發語言是C++,並不會因為是用於手機的作業系統就複雜了多少,就象很多人一直掛在嘴邊的J2ME也畢竟是Java語言,並不會因為用在手機上就高深了多少一樣。

        因為是用於手機的作業系統,所以我們研究Symbian的話,研究Nokia的60系列平台是一個很不錯的選擇,Nokia根據手機的螢幕大小和價格高低把手機分成了多個系列,60系列目前有兩款手機:7650和3650。60系列採用Symbian   os   6.1,然後又根據手機螢幕的特點對UI做了一些修改,這個被修改了的Symbian就被稱為Nokia的60系列平台。所以接下來的內容對7650同樣有用。 

        入門的第一步就是要下載S60的SDK,可以從Nokia的開發論壇上下載:http://www.asia.forum.nokia.com/chinese/sch/main/series60.html。

        看Nokia網站上最新的是1.0,不過下面又有個0.9中文版,所以自然要下載這個0.9版了。100多兆吧,不想下的話,可以跟Nokia要光碟片,估計他們應該很高興給。這個0.9中文版的模擬器是中文版的,而且有支援GBK和UNICODE轉換的類,不知道1.0的英文版有沒有。  

        下載完了就是安裝,選一個目錄裝就是了,不過最好裝在C盤上。可能是考慮到Windows平台和Unix平台都能用的緣故,這套SDK在處理盤符和目錄時比較弱智,我當時SDK裝到C盤,自己的程式放到D盤用vc6產生新項目就有問題,經觀察是盤符的問題。所以保險起見的話,最好裝在C盤,有興趣的可以替Nokia測試一下。另外,還需要Java的運行庫和Perl,SDK裡也都帶了,不過他內建的Perl在我的XP下裝有問題,我下載了一個最新的ActivePerl才最終算是安裝完畢。從SDK的安裝來看,這幫搞手機的搞軟體好像確實不太專業,呵呵。
 

        剛才說了,我的Symbian安裝到了C盤,在C盤的Symbian目錄下,有一個6.1的目錄,6.1目錄下有兩個目錄:Series60和Shared。還好,從名字上能看出大體的意思。請一定注意Series60目錄下的Epoc32\BUILD目錄,因為這個目錄以後要反覆的用到。 

        接下來的任務就是要編譯一下HelloWorld,然後再運行一下看看了。首先得確認你的系統裝VC6了(最好能裝sp3以上,否則將來用到vc6時會警示),而且得把C:\Program   Files\Microsoft   Visual   Studio\VC98\Bin放到你的PATH裡,主要是用nmake.exe(也要是用其中的link.exe,注意將其對應路徑移至path中含有link.exe程式的最前面)。所以如果你有nmake的話,不裝vc6也可以看helloworld。找到helloword例子的目錄,在我這裡是C:\Symbian\6.1\Series60\Series60Ex\HelloWorld\groupSymbian裡,一個Project通常是按inc,src,group等目錄組織,group目錄裡通常放的是專案檔,所以編譯時間要先到這裡。用命令提示字元模式進入剛才說的那個目錄下,然後執行  
bldmake   bldfiles這個命令會在group目錄下產生一個abld.bat的批次檔,並且會在C:\Symbian\6.1\Series60\Epoc32\BUILD下產生C:\Symbian\6.1\Series60\Epoc32\BUILD\SYMBIAN\6.1\SERIES60\SERIES60EX\HELLOWORLD\GROUP這個深的一個目錄,並在最底層目錄下產生一堆.make檔案。(實在理解不了為什麼要這麼搞?難道因為他們是生產手機的?)雖然它產生了這麼多東西,但是我們不要管,繼續輸入abld  
build   wins   udeb這個命令會編譯我們的程式,最後在   C:\Symbian\6.1\Series60\Epoc32\Release\wins\UDEB目錄下產生我們的helloworld,然後我們可以從開始菜單裡運行模擬器的debug版,開啟other目錄就可以運行helloworld了。  

        如果要在VC6裡編譯和運行HelloWorld,在運行完bldmake   bldfiles後,運行abld   makefile   vc6,則會產生vc6的dsw檔案,位置在   C:\Symbian\6.1\Series60\Epoc32\BUILD\SYMBIAN\6.1\SERIES60\SERIES60EX\HELLOWORLD\GROUP\HELLOWORLD\WINS

        看Symbian把這點事搞得這麼麻煩,也真是不容易。  

        如果要直接在vc6裡建立新項目的話,要把   C:\Symbian\6.1\Series60\Series60Tools目錄下的檔案拷貝到vc6的模板目錄下才可以。 

        折騰到這裡,可能得花2個多小時吧,接下的時間看看文檔了。  

        先看看HelloWorld的協助文檔,理解一下Symbian程式的體繫結構。Symbian程式也是按照VC的文檔視圖結構來組織程式的,有Application類CAknApplication,有Document類CAknDocument,有Frame類CAknAppUi,有視圖類CCoeControl等,跟vc的結構好像是差不多的,但感覺上它的Document類好像是做樣子的,我還沒看到這一塊。關於這些類之間的調用關係,在HelloWorld的文檔裡有個順序圖非常好,一看便知。 

        在看Symbian的代碼時,感覺最不適應的可能就是經常看到PushL和Pop函數,還有就是很多的函數都有L或LC的尾碼。其實這是Symbian的例外處理機制。比如說我們定義了一個指標,給它分配了空間,可是在使用它的時候程式突然間出現了致命錯誤中止了,那這個指標佔用的地址空間我們肯定是收不回來了,在PC上編程這一點可能問題不大,記憶體那麼多,而且用不了多長時間就重啟動了,但是Symbian的設計者可能認為這在手機上是不行的,所以對這一點做了很多的設計。

        Symbian有一個Clean   up   stack,在使用指標時,用PushL把指標壓入棧中,使用完後在用Pop彈出棧,如果在中間調用可能導致崩潰的函數時果真出現了問題,那麼Clean   up   stack可以通過調用該指標的解構函式回收佔用的空間。這些可能導致崩潰的函數在Symbian裡被稱為可能Leave的函數,所以就在這些函數的尾部加了一個L。而加LC尾碼的函數表明該函數已經在內部把指標用PushL壓入clean   up   stack了,調用時無需再用PushL,直接調用完用Pop既可。Clean  
up   stack還提供了一個PopAndDestroy函數,就是彈出棧後再銷毀指標。順便提一句,正式因為有了Clean   up   stack機制,所以Symbian在有些地方看起來跟VC的程式不太一樣,比如說很多類的建構函式都不用,用NewL或NewLC構造,分配地址時的操作符new()也變成了new(ELeave)。上述內容可以看一下Symbian編程基礎中的記憶體管理一節。 

        Symbian自己定義了一堆的資料類型,如果不想找麻煩的話,還是乖乖的用這些類型的好。簡單說一下,整型有TInt和TUint,其中又分為8位的,16位的和32位的,如TInt8,TInt16,TInt32;文本類型是TText,又細分為TText8和TText16,但內部都是Unicode的,所以實際上內部引用應該都是TText16;bool型是TBool,對應的值有ETrue和EFalse;浮點型是TReal,但又分為TReal32和TReal64;還有一個參考型別TRefByvalue,是以模板類的形式提供的。
 

        因為Symbian是衝著更物件導向設計的,所以在我們常見的字串這塊變化比較大,在Symbian裡叫descriptor。最底層的是兩個抽象類別TDesC和TDes,實際上TDes也是繼承的TDesC,TDesC中的C字母是常量constant的意思。即帶C字母結束的都是定義的常量,是不可以修改的,而不帶C的都有一個最大長度的限制,是可以修改的,下面也是同樣的道理。指標描述符是TPtrC和TPtr,類似於C++中的char   *;緩衝區描述符(Buffer   descriptor)是TBufC和TBuf,類似於char  
[];堆描述符是HBufC,類似於(char   *)malloc(length+1)的用法。具體用時,上述的類型又分為8位的和16位的。舉個例子:  
        TBuf <64>   buf;
        CEikonEnv::Static()-> ReadResource(   buf,   R_EXAMPLE_VIEW_TITLE   );
        先定義了一個最大長度是64的緩衝區,然後讀入名為R_EXAMPLE_VIEW_TITLE的資源。  
        再例如:  
        TText8   *str   =   (TText8*) "示範視窗標題 ";
        TPtrC8   source(   str   );
        iInfoText   =   HBufC::NewL(   source.Length()   );

        TPtr16   ptr   =   iInfoText-> Des();

        定義一個8位的字串str,然後構造一個指標常量source,根據source長度再定義一個16位的指標,下一步我這裡沒寫,但明顯著應該是把gbk的轉換為unicode了。  

        Symbian的資源檔一般是以rss為副檔名的,沒有專門的資源檔編輯器,使用者必須用記事本開啟rss檔案手工編寫rss檔案。這個都有一定的規則和方法,參考例子不難編寫自己的資源檔。需要注意的一點是,如果資源檔裡包含中文,那麼必須把檔案另存新檔utf-8格式的才可。 

        入門相對來說是比較簡單的,但精通就需要大量的實踐了。  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.