Hello Symbian

   Symbian OS的入门资料并不好找,sdk的帮助文档内容纷杂,组织结构也不适合作为入门者的参考资料。Symbian C++是对C++语言的改进,尤其是在异常处理方面更是为了适应手机硬件平台做了改进。

   这篇文章我们主要介绍如何在symbin平台上开始第一个应用程序~Hello Symbian.
   在介绍Hello Symbin之前,需要安装Symbin的sdk,sdk可以在 Nokia论坛找到。本文介绍的程序在S60 3rd FP1上验证通过。
   首先贴出代码:
  1. // helloSymbian.cpp
  2. #include <e32base.h>
  3. #include <e32cons.h>
  4. // Global Variations
  5. LOCAL_D CConsoleBase* gConsole;
  6. // Console Process
  7. void ConsoleMain()
  8. {
  9. // Call function
  10.   gConsole->Printf(_L("Hello world!/n"));
  11.   gConsole->Printf(_L("Press any key to continue.../n"));
  12.   gConsole->Getch();
  13. }
  14. // Entry Point
  15. GLDEF_C TInt E32Main()
  16. {
  17. __UHEAP_MARK;
  18. // Get a console
  19. gConsole = Console::NewL(_L("Hello Text"),TSize(KConsFullScreen, KConsFullScreen));
  20. ConsoleMain();
  21. delete gConsole;
  22. __UHEAP_MARKEND;
  23. return 0;
  24. }

    在同一文件夹中建立HelloSymbian.mmp,文件内容如下:

  1. // HelloSymbian.mmp
  2. TARGET HelloSymbian.exe
  3. TARGETTYPE exe
  4. SOURCEPATH .
  5. SOURCE HelloSymbian.cpp
  6. USERINCLUDE .
  7. SYSTEMINCLUDE /epoc32/include
  8. LIBRARY euser.lib

    在同一文件夹中建立BLD.INF,文件内容如下:

  1. // BLD.INF
  2. PRJ_MMPFILES
  3. HelloSymbian.mmp

 

    到此,HelloSymbian代码文件创建完毕,以下是编译过程:

    在控制台中进入HelloSymbian所在目录,执行以下命令:

    

  1. bldmake  bldfiles
  2. abld build winscw udeb

    生成的可执行文件在sdk安装目录/epoc32/release/winscw中,名为HelloSymbian.exe。

 

下面我们简要介绍一下HelloSymbian.cpp的代码文件:

  1. #include <e32base.h> 
  2. #include <e32cons.h> 

    e32base.h中定义了所有在堆上实现的基类;

    e32cons.h是console的定义。

  1. void ConsoleMain()
  2. {
  3. // Call function  
  4.   gConsole->Printf(_L("Hello Symbian!/n"));
  5.   gConsole->Printf(_L("Press any key to continue.../n"));
  6.   gConsole->Getch();
  7. }

 

    ConsoleMain()函数是实现了在Console上输出一些字符的功能。

    gConsole->Getch()等待用户在控制台上输入一个字符,这里我们主要是为了,让控制台一直处于等待状态,让我们能看到打印出来的提示字符。

  1. GLDEF_C TInt E32Main()
  2. {
  3. __UHEAP_MARK;
  4. // Get a console 
  5. gConsole = Console::NewL(_L("Hello Text"),TSize(KConsFullScreen, KConsFullScreen));
  6. ConsoleMain();
  7. delete gConsole;
  8. __UHEAP_MARKEND;
  9. return 0;
  10. }

 

     E32Main()是Symbian上的入口函数类似于C/C++中的main()函数。 __UHEAP_MARK 宏定义为在debug阶段检查程序分配的堆,它和__UHEAP_MARKEND成对使用。

 

     Console::NewL()函数构造一个console对象,你也许注意到在Symbian中的对象构造和C++中很不一样,这与Symbian处理异常的机制有关,(大家可以在我的博客的其他文章中了解Symbian的异常处理机制。) 之后调用ConsoleMain在console上打印出提示字符,最后释放gConsole。

     下面我再提供一个版本的HelloSymbin代码,这个代码中用到了CleanupStack等更符合Symbian程序的习惯:

  1. //HelloSymbian.cpp
  2. #include <e32base.h>
  3. #include <e32cons.h>
  4. LOCAL_D CConsoleBase* gConsole;
  5. // Real main function
  6. void MainL()
  7. {
  8. gConsole->Printf(_L("HelloS ymbian!/n"));
  9. gConsole->Printf(_L("Press any key to continue.../n"));
  10. gConsole->Getch();
  11. }
  12. // Console harness
  13. void ConsoleMainL()
  14. {
  15. // Get a console
  16. gConsole = Console::NewL(_L("Hello Symbian"),
  17. TSize(KConsFullScreen, KConsFullScreen));
  18. CleanupStack::PushL(gConsole);
  19. // Call function
  20. MainL();
  21. // Finished with console
  22. CleanupStack::PopAndDestroy(gConsole);
  23. }
  24. // Cleanup stack harness
  25. GLDEF_C TInt E32Main()
  26. {
  27. __UHEAP_MARK;
  28. CTrapCleanup* cleanupStack = CTrapCleanup::New();
  29. TRAPD(error, ConsoleMainL());
  30. __ASSERT_ALWAYS(!error, User::Panic(_L("Hello world panic"), error));
  31. delete cleanupStack;
  32. __UHEAP_MARKEND;
  33. return 0;
  34. }

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值