Symbian之源码分析之EikStart.cpp
2010-07-04 15:43:00 来源:WEB开发网开源了那么久,今天终于决定去看看那近2G的代码了。我们先看看启动一个程序到初始化UI类完成系统都做了些什么。
首先说下Eikon、Uikon、Avkon、Qikon的概念。在Symbian OS v5里UI框架叫做Eikon,虽然它被设计成支持8位build和16位build,但事实上它只支持8位build。到了OS v5.1,Eikon开始支持16位build,为了体现这个改变,将Eikon更名为Uikon。这之后基于Uikon层之上衍生出了S60平台的应用程序框架”Avkon”(OS v6.0)以及UIQ平台的应用程序框架”Qikon”(OS v7.0)。
Uikon采用CEik、Avkon采用CAkn、UIQ采用CQik作为类名的前缀。
相关wiki:
http://wiki.forum.nokia.com/index.php/Uikon-Eikon-Avkon-Qikon
接下来进入主题,我们依旧以HelloWorld工程为例,看它的第一个文件HelloWorld.cpp:
#include
#include "HelloWorldApplication.h"
LOCAL_C CApaApplication* NewApplication()
{
return new CHelloWorldApplication;
}
GLDEF_C TInt E32Main()
{
return EikStart::RunApplication( NewApplication );
}
当一个程序启动时,都会调用E32Main()函数。NewApplication函数创建并返回一个CApaApplication实例,LOCAL_C即static的宏定义。RunApplication接收的参数是TApaApplicationFactory,其中有这么段定义:
class TApaApplicationFactory
{
public:
typedef CApaApplication* (*TFunction)();
};
所以这里传进去的是NewApplication函数的地址,工厂函数Factory的命名由此而来。EikStart::RunApplication()函数的关键代码如下:
EikStart::RunApplication(TApaApplicationFactory aApplicationFactory)
{
//创建命令行对象并获取程序启动命令行参数
CApaCommandLine* commandLine = NULL;
TInt error = CApaCommandLine::GetCommandLineFromProcessEnvironment(commandLine);
//更改进程名
//注意{}的妙用,这样TFileName就不会一直存在于栈上面,节省了512字节的空间。Symbian默认的栈空间大小为8KB,最大可为64KB。
{
更多精彩
赞助商链接