WEB开发网
开发学院手机开发Symbian 开发 Symbian之源码分析之EikEnv.cpp 阅读

Symbian之源码分析之EikEnv.cpp

 2010-07-04 15:42:00 来源:WEB开发网   
核心提示:这篇着重讲下里面CEikonEnv相关的几句:CEikonEnv* env = new CEikonEnv;TRAP(error, env->ConstructAppFromCommandLineL(aApplicationFactory, *commandLine));env->Execute();env

这篇着重讲下里面CEikonEnv相关的几句:

CEikonEnv* env = new CEikonEnv;

TRAP(error, env->ConstructAppFromCommandLineL(aApplicationFactory, *commandLine));

env->Execute();

env->DestroyEnvironment();

一、创建CEikonEnv实例

CEikonEnv的默认构造函数实现为空,但是其基类CCoeEnv的构造函数做了些事情:

CCoeEnv::CCoeEnv() : CActive(EActivePriorityWsEvents)

{

TInt error=KErrNone;

//conenv已经存在时抛cone 2异常

__ASSERT_ALWAYS(!TheCoe(),Panic(ECoePanicEnvironmentAlreadyExists));

//设置当前conenv

if (error==KErrNone)

error=SetTheCoe(this);

//初始化清理栈,注意用的是New()而不是NewL()

iCleanup=CTrapCleanup::New();

if ((iCleanup==NULL) && (error==KErrNone))

error=KErrNoMemory;

//不能在这里抛异常,否则iCleanup对象所分配的内存将永远无法收回。

//所以在这里需要一个标记,在CCoeEnv::ConstructL里会处理。

if (error!=KErrNone)

{

iExtra=REINTERPRET_CAST(CCoeEnvExtra*, error);

iEnvFlags|=EExtraPointerIsErrorCode;

}

}

二、创建应用程序

这部分代码比较多,本篇先说到调用CEikonEnv::ConstructL()为止。

CEikonEnv::ConstructAppFromCommandLineL(const TApaApplicationFactory& aApplicationFactory,const CApaCommandLine& aCommandLine)

{

// Construct iEikEnvExtra here so that the app language can be stored in it

if (!iEikEnvExtra)

iEikEnvExtra = CEikEnvExtra::NewL(*this);

//连接AppArc server

RApaLsSession apparcServer;

CleanupClosePushL(apparcServer);

TInt err = apparcServer.Connect();

//保存程序Language到iEikEnvExtra->iAppLanguage及baflutils里

StoreAppLanguageL(apparcServer);

//设置默认screen

if (aCommandLine.IsDefaultScreenSet()) //如果命令行参数有设置过

1 2 3 4 5  下一页

Tags:Symbian 源码 分析

编辑录入:coldstar [复制链接] [打 印]
赞助商链接