Symbian是一个广泛运行于手机和移动设备上的操作系统,由于手机和PC不同,它没有统一的标准,其硬件配置及其所导致的用户界面都差异巨大(譬如有的手机有触笔而有的没有),Symbian提供基本服务和一套比较通用的UI层(UIKON),取得Symbian授权的手机厂家一般都会针对自己具体型号的手机设计自己的用户界面,比较著名的是Nokia的Series 60平台(用于Nokia 7650、Nokia N-Gage、Siemens SX1等)和Sony Ericssion的UIQ平台(UIQ平台本身是Symbian的原生UI,不过现在Symbian把它卖给了Sony Ericssion)。前者针对单手操作的按键式手机,没有触摸屏和手写笔,一般有一个4方向导航键,后者运行于有较大屏幕,带有触摸屏的手机。
一、模块分析
AVKON是Nokia在Symbian的UIKON UI层基础上开发出来的专用于S60的UI层,和MFC有点相似之处。HelloWorld项目是基于此框架开发的。
首先,每个编译出来的GUI应用程序(*.app)实际上是一种多态dll,不是一个通常意义上的类似于exe那样的可执行模块。当执行一个应用程序时,OS把app文件名作为参数传递给apprun.exe,由apprun.exe创建应用程序进程并把*.app加载到新创建的进程的地址空间,因此,每个app都导出了一个函数NewApplication(),它是用序号导出的。以Helloworld工程为例,察看目录%SDKROOT%/6.1/Series60/Epoc32/BUILD/SYMBIAN/6.1/SERIES60/SERIES60EX/HELLOWORLD/GROUP/HELLOWORLD/WINS下面的HELLOWORLD.def文件可以看出这一点。NewApplication的函数体在Helloworld.cpp文件中,它所做的工作很简单,仅仅是new一个CHelloWorldApplication对象然后返回其指针。在这个文件中还有另一个全局函数E32Dll,此函数意义等同于Windows中dll编程的DllMain函数,是DLL的Entry Point,在此可以进行初始化TLS(Thread Local Storage)的动作,每个Symbian程序都必须有这个函数。当应用程序准备运行的时候,E32Dll会最先被框架所调用,框架会传进来一个参数aReason,此参数有4种可能值:EDllProcessAttach, EDllThreadAttach, EDllThreadDetach or EDllProcessDetach,在这里直接返回KErrNone,表示没有错误。
接下来分析应用程序类CHelloWorldApplication。这个类按照官方文档的说法就是“An Application that creates the new blank document and d