Symbian 的HelloWorld的详细解读
来源:互联网 发布:易语言鼠标连点器源码 编辑:程序博客网 时间:2024/05/16 15:27
当我们完全建立起来这个 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
在这里,设计到了 S60 的 framework,关于 Framework 的详细信息,请阅读下面这份文档,在阅读的过程中,结合 Hello World 程序,你就能加深在 Symbian 程序的理解。
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
在这里,设计到了 S60 的 framework,关于 Framework 的详细信息,请阅读下面这份文档,在阅读的过程中,结合 Hello World 程序,你就能加深在 Symbian 程序的理解。
- Symbian 的HelloWorld的详细解读
- 解读Helloworld的代码
- Symbian仿真器下的helloworld
- Rachel_Zhang的“压缩感知”之“HelloWorld"解读
- hanoop的helloworld——WordCount解读
- .NET技术的详细解读
- PHP数组的详细解读
- spring事物的详细解读
- XHR的用法详细解读
- spring事务的详细解读
- 第一个symbian程序(HelloWorld)的理解
- 详细解读简单的lstm的实例
- 详细解读Hibernate包的作用
- 详细解读JavaScript的this关键字
- 详细解读Hibernate包的作用
- 详细解读Hibernate包的作用
- Tablespace 的详细解读和高水位
- 详细解读Hibernate包的作用
- 隐藏链接的虚线框
- 分页类
- 全面剖析XMLHttpRequest对象——发送请求
- 给你的MDI程序加上一个标签栏,方便地切换和关闭子窗体
- 用微软 IE 8 Beta 调试 JavaScript
- Symbian 的HelloWorld的详细解读
- 全面剖析XMLHttpRequest对象——处理请求
- XML:XSD 复合类型指示器
- PHP常用函数
- BI、ERP系统实施顺序问题
- myfaces+ajax4jsf+spring+jpa+chartCreate 配置备忘
- 易用性更强!Firefox3.0Beta4发布
- XMLSpy
- M1非接触式射频存储卡卡唯一号(十六进制值表示),去除其前部为0的自定义函数