helloworld(on symbian

當我們完全建立起來這個 Hello Carbide example 程序的時候,Framework 一共爲我們建立了以下的 Class:
1,CHelloCarbideApplication
   一個 Application 的應用程序類,從 CAknApplication 繼承出來,
2,CHelloCarbideDocument
   這個是文檔類,專門用來存儲應用程序的數據的
3,CHelloCarbideAppUi     應用程序的 UI 類
4,CHelloCarbideAppView   應用程序的 View 類

執行流程

應用程序的入口,在 HelloCarbide.cpp 這個文件中,
整個程序的入口,Symbian 程序的入口函數名叫 E32Main,不是普通 PC 開發中的 main()
EikStart 這個 class 是專門用來初始化和啓動應用程序的,RunApplication 函數的參數是一個工廠方法,在這裏就是
NewApplication

LOCAL_C CApaApplication* NewApplication()
{
  return new CHelloCarbideApplication();
}

GLDEF_C TInt E32Main()
{
  return EikStart::RunApplication( NewApplication );
}


程序的執行流程就從這裏開始,在 NewApplication 方法中 new 了一個 CHelloCarbideApplication class 的 Object,
然後 S60 Framework 會調用 CHelloCarbideApplication::CreateDocumentL() 方法來創建一個文檔對象,

CApaDocument* CHelloCarbideApplication::CreateDocumentL()
{
  return (static_cast<CApaDocument*>( CHelloCarbideDocument::NewL( *this ) ) );
}

我們看到,在這個方法中,調用了 CHelloCarbideDocument class 的 static 函數 NewL.
在這裏的 NewL 和 NewLC 方法就是典型的 Symbian 的 Clean Stack 的用法,
Clean Stack 是 Symbian 中非常重要的概念,一定要搞明白,
請讀下面這個文檔,它非常清楚的說明了 Clean Stack 的用法,在結合這一段代碼,就能很好理解了。

CHelloCarbideDocument* CHelloCarbideDocument::NewL( CEikApplication& aApp )
{
        CHelloCarbideDocument* self = NewLC( aApp );
        CleanupStack::Pop( self );
        return self;
}

CHelloCarbideDocument* CHelloCarbideDocument::NewLC( CEikApplication& aApp )
{
        CHelloCarbideDocument* self = new ( ELeave ) CHelloCarbideDocument( aApp );
        
        CleanupStack::PushL( self );
        self->ConstructL();
        return self;
}

再繼續,S60 framework 會調用 下面整個函數來創建 UI 對象
CEikAppUi* CHelloCarbideDocument::CreateAppUiL()
{
  return ( static_cast <CEikAppUi*> ( new ( ELeave ) CHelloCarbideAppUi ) );
}

void CHelloCarbideAppUi::ConstructL()
{
        // Initialise app UI with standard value.
        BaseConstructL();
        
        // Create view object
        iAppView = CHelloCarbideAppView::NewL( ClientRect() );
}

在這裏又會去調用 CHelloCarbideAppView::NewL 來創建 View 對象,這個 NewL 方法和 CHelloCarbideDocument::NewL 原理是完全一樣的,這裏就不多說了。

至此,Hello World 程序的初始化過程完畢。


關於調試

你最好能自己單步跟蹤調試一下程序,就能很清楚的看到整個程序的執行流程,對你理解 Symbian 程序有非常打的幫助。

在 Editor View 中,共有下面三種方法可以設置斷點,
    * Double-click the marker bar to the left of the line of code where you want to place a breakpoint
    * Right-click in the marker bar and select Toggle Breakpoint
    * Click on the line of code and select Run > Toggle Breakpoint from the program menu bar
   
然後,主菜單 Run > Debug As > Debug Symbian OS Application,就可以開始調試。
在調試的過程中有四個按鍵需要了解,
F5,Step Into
F6,Step Next
F7,Step Return
F8,Resume
發佈了11 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章