原文网址:http://www.hotpim.com/blog/myIndex.jsp?a=bc&b=2130&u=387
Symbian OS C++学习
学习symbian手机开发快两个星期了,个人觉得学习symbian入门确实挺难的,在学习symbian开发的过程中也走了很多弯路,现将自己这段时间学习symbian的过程写下来,以期望能给将来打算学习symbian开发的同事带来一定的帮助;
俗话说,弓欲善其事,必先利其器,要学习symbian手机开发,当然首先需要安装symbian的开发环境(这里我们使用symbian sdk 2.0以及VC6 IDE),这里就不详细介绍,读者参考笔者写的symbian安装指导,按照顺序安装好symbian,然后检查一下看看能不能用,检查方法是拷贝安装目录下的helloworld(C:\Symbian\7.0s\Series60_v20\Examples\helloworld)示例到系统根目录(c盘根目录),然后进入DOS命令界面,进入helloworld当前目录,输入bldmake bldfiles(如下图1)回车,如果安装好的symbian开发环境不能用,则会会提示错误,正常情况不提示(如下图1);
图1
小提示:不知道是什么原因,笔者在学习
symbian
的过程中发现,如果我们需要编译的项目文件不放在
c
盘下的话,输入
bldmake bldfiles
提示环境变量
RPOCROOT
有问题,以及输入其他编译命令都会出问题(此外,在
VC
中新建项目,如果不放在
c
盘也会有问题),具体原因笔者也还没有搞清楚(也许
symbian
硬性规定吧),所以笔者建议将项目放在
c
盘下,这样就可以顺利我们的开发了;
好了,现在开发环境已经建立好了,接下来介绍一下如何学习
symbian OS C++
了;笔者建议,初学者不要买什么参考书,直接看
SDK
中自带的文档就可以,
SDK
文档(直接进入
C:\Symbian\7.0s\Series60_v20\Series60Doc
这个目录看)有详细的
symbian
介绍,当然,这些文档都是英文的,如果英语不是很好的话,学习起来确实有点困难,不过笔者认为不要怕,大不了开着金山词霸,然后硬着头皮看,多花点时间慢慢看就好了,既可以学习
symbian
又可以提高英语,一举两得;
1
、阅读SDK
文档
笔者觉得先看
coding idioms for symbian os.pdf
,这个文档主要是讲述
symbian
开发的一些通俗约定,先看这个的原因是,当你熟悉了这些约定后,接下来你看示例或者是其他文档,不会觉得莫名其妙,因为
Symbian C ++
与我们平常
PC
平台的
C++
编程规范很不一样;笔者在学习过程中走了弯路,开始学习时拿到了一本叫做“
Symbian OS C++
手机应用开发”的书,刚开始看的迷迷糊糊,不知所云,原因就是不了解
symbian
的编程约定,所以看到很多名字和代码都不知道是怎么回事;
然后,再看看
series 60 ui style guide.pdf
,这个文档主要是介绍
series 60
开发的一些
UI
基本格局以及一些专业术语约定,当然,如果你以前做过手机开发,也许可以不看,因为目前大部分手机的界面格局基本都差不多;
接着再看看
getting started.pdf
、
guide for application developers on document handler.pdf
和
appwizard guide.pdf
这几个文档,前两个文档主要让你对
symbian
开发有感性认识,掌握一些基本知识;最后一个是教你怎么使用
VC IDE
建立一个新的
symbian
项目;
有了上面的基本知识后,我们再看
application framework handbook.pdf
这个文档,这个文档挺重要的,主要介绍
symbian
软件程序的开发框架(专业讲是软件的设计模式),看完这个文档,读者应该对
symbian
软件开发框架有个整体认识(真正开发还需要很多其他知识),知道怎样建立
symbian
应用程序,编写
symbian
程序具体怎么个步骤应心中有数;
说到这里,笔者顺便提一下
symbian
使用的设计模式,它采用
MVC
模式,
MVC
字面意思是
Model
、
View
、
Control
,
Model
主要负责数据,
View
主要用于显示数据以及屏幕的一些处理,
Control
主要是负责处理用户交互以及对数据的访问控制;
MVC
很象微软的文档
/
视图结构(有微软
MFC
编程经验的人应该很清楚了),采用
MVC
的目的主要是为了文件的结构清晰,软件开发的复杂度明显降低;
看完上述文档后,应该对
symbian
有了个基本了解,开发的整体框架也知道,接下来就可以看一下深入的开发资料了,至于顺序就没什么关系,自己看着办,把其他资料看完就可以;
2
、示例分析
想要学会
symbian
开发,光看资料是没用的,还得多看示例代码,并自己多动手写才能真正掌握,接下来我们来分析一下
helloworld
这个程序:
helloworld.mmp
这个文件是项目工程文件,指出本工程包含信息有:目标文件名,目标问题类型,
UID
(应用程序标识号,目标文件、资源文件、源文件、头文件、库文件的位置;
HelloWorld.rss
资源文件,定义了该程序用到的资源(包括字符资源,菜单等资源);
Helloworld.uid.cpp
,定义程序标识号;
Helloworld_main.cpp
,程序入口点所在文件,该文件中包含两个函数
TInt E32Dll(TDllReason)
,
CApaApplication* NewApplication()
,前一个没什么意义,后一个是用于建立程序示例,算是整个程序的入口点,整个程序由它来建立第一个我们的应用对象实例,这里建立
CExampleApplication
对象的一个实例;
Helloworld_application.cpp
,
CExampleApplication
类对象的具体实现文件,包含两个函数
CreateDocumentL
(),
AppDllUid()
,前一个用于建立文档对象实例,后一个取得程序标识号;
Helloworld_document.cpp
,
CExampleDocument
类对象的实现文件,包含
CExampleDocument(CEikApplication& aApp)
,
CreateAppUiL()
两个成员函数,前一个是构造函数,后一个用于创建应用程序接口对象;
Helloworld_appui.cpp
,
CexampleAppUi
类对象的实现文件,
HandleCommandL(TInt aCommand)
命令处理函数,
~CExampleAppUi()
析构函数,
ConstructL()
第二阶段构造函数,用于创建应用程序视图;
Helloworld_appview.cpp
,该文件中,
CExampleAppView
()默认构造函数,
ConstructL(const TRect& aRect)
第二阶段构造函数,建立具体的视图界面,
~CExampleAppView()
析构函数,
NewL(const TRect& aRect)
对象示例构建函数,
Draw(const TRect& /*aRect*/)
视图窗口绘制函数,用于绘制窗口;
整个程序的建立过程就是:系统通过
NewApplication
建立
CExampleApplication
对象实例,然后由其建立
CExampleDocument
文档对象,再由
CExampleDocument
建立
CExampleAppUi
对象,最后由
CExampleAppUi
建立
CExampleAppView
对象;
从
MVC
的角度来讲,
CExampleDocument
相对于
M
,
CExampleAppUi
对应于
C
,
CExampleAppView
对应于
V
;整个文件因此包含四部分,也就是四个类,应用程序类、文档类、应用程序
UI
类以及应用程序视图类;
3
、应用程序的编译
应用程序的编译方式包括两种:命令行表演和图形
IDE
中编译,我个人习惯命令行编译;
首先,进入
helloworld
编译配置文件所在目录(一般就是
bld.inf
文件所在目录。这里就是
helloworld
当前目录),然后输入
bldmake bldfiles
(如图
1
),接着输入
abld build wins udeb
(这里解释一下
wins
和
udeb
两个参数,前一个参数指定生成是针对仿真器、使用的是
VC
编译器,后一个参数表示使用
unicode
调试生成;这样编译就完成了;
如果还想让该项目在
VC IDE
中打开,这样用命令
abld makefile vc6
将来
VC
工程文件;
4
、运行程序
要运行刚才编译生成的程序,可以直接在命令行输入
epoc.exe
也可以在
VC IDE
中直接点击运行(需要选择
epoc
来运行,在
C:\Symbian\7.0s\Series60_v20\Epoc32\release\wins\udeb
中),这样启动仿真器后就可以在仿真器上运行编译好的程序;
以上只是编译成能够在仿真器上运行的调试程序,真正的程序要运行在真机上了,则编译参数需要改一改,并制作成安装包,安装到真机上运行;
总结,编译命令
bldmake bldfiles
:生成项目的生成文件和批处理文件
abld.bat
;
abld build <platform> <buildtype>
:编译命令,
<buildtype>
参数若为
udeb
,则生成调试版,为
urel
则为发布版,为
all
,则同时生成两种;
<platform>
依赖于目标处理器和所用编译器两方面,若是仿真器下,则有
winsb
(针对
Borland c++
)、
winscw
(
Metrowerks
)、
wins(Microsoft)
使用完全相同的过程,可以为实际的目标手机运行命令生成,只是
<platform>
参数不一样,可以是
ARM4 (
为
ARMv4
指令集编译
)
,
ARMI
(为
ARMv4T
指令集的
THUMB
模式子集编译),
THUMB (armvT
指令集的
ARM
模式子集编译
)
;
如要使用
VC6 IDE
则进入包含
abld.bat
文件的目录下,在命令行输入
abld makefile vc6