Symbian OS C++学习

公孙胡媚
2023-12-01
  原文网址: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

转载于:https://www.cnblogs.com/singa/archive/2008/08/26/1276263.html

 类似资料: