Symbian系统(转)

news/2024/7/20 12:41:03 标签: java, c/c++, 内存管理
Symbian是一个操作系统,是以Nokai为首的各手机厂商合伙攒的一个操作系统,主要用于高端的智能手机。其开发语言为C++,可以使用Microsoft Visual C++ 6.0作为集成化的开发环境,看来虽然Symbian的目标是跟微软的SmartPhone较劲,在采取的手段和方法上却也是不拘一格,微软更是暗暗叫苦,谁让当时vc6设计的这么开放,结果被敌人拿去做武器了。

  本文只是为了Symbian的开发入门,所以应该是非常简单的事,因为毕竟Symbian的开发语言是C++,并不会因为是用于手机的操作系统就复杂了多少,就象很多人一直挂在嘴边的J2ME也毕竟是Java语言,并不会因为用在手机上就高深了多少一样,只能是更简单。5小时是我从对Symbian一无所知到完成本文化在Symbian上的所有时间。

  因为是用于手机的操作系统,所以我们研究Symbian的话,先选定一款手机再说。Nokai的60系列平台是一个很不错的开始,Nokai根据手机的屏幕大小和价格高低把手机分成了多个系列,60系列目前有两款手机:7650和3650。60系列采用Symbian os 6.1,然后又根据手机屏幕的特点对UI做了一些修改,这个被修改了的Symbian就被称为Nokia的60系列平台。

  所以入门的第一步就是要下载S60的SDK,可以从Nokai的开发论坛上下载:http://www.asia.forum.nokia.com/chinese/sch/main/series60.html。看Nokai网站上最新的是1.0,不过下面又有个0.9中文版,所以自然要下载这个0.9版了。100多兆吧,不想下的话,可以跟Nokai要光盘,估计他们应该很高兴给吧。这个0.9中文版的模拟器是中文版的,而且有支持GBK和UNICODE转换的类,不知道1.0的英文版有没有。

  下载完了自然就是安装,选一个目录装就是了,不过最好装在C盘上,可能是考虑到Windows平台和Unix平台都能用的缘故,这套SDK在处理盘符和目录时比较弱智,我当时SDK装到C盘,自己的程序放到D盘用vc6生成新项目就有问题,经观察是盘符的问题。所以保险起见的话,最好装在C盘,有兴趣的可以替Nokai测试一下。另外,还需要Java的运行库和Perl,SDK里也都带了,不过他自带的Perl在我的XP下装有问题,我下载了一个最新的ActivePerl才最终算是安装完毕。从SDK的安装来看,这帮搞手机的搞软件好像确实不太专业。

  刚才说了,我的Symbian安装到了C盘,在C盘的Symbian目录下,有一个6.1的目录,6.1目录下有两个目录:Series60和Shared。还好,从名字上能看出大体的意思。请一定注意Series60目录下的Epoc32BUILD目录,因为这个目录以后要反复的用到。

  接下来的任务就是要编译一下HelloWorld,然后再运行一下看看了。首先得确认你的系统装VC6了(最好能装sp3以上,否则将来用到vc6时会报警),而且得把C:Program FilesMicrosoft Visual StudioVC98Bin放到你的PATH里,主要是用nmake.exe。所以如果你有nmake的话,不装vc6也可以看helloworld。

  找到helloword例子的目录,在我这里是C:Symbian6.1Series60Series60ExHelloWorldgroup。Symbian里,一个Project通常是按inc,src,group等目录组织,group目录里通常放的是项目文件,所以编译时要先到这里。用命令提示符模式进入刚才说的那个目录下,然后执行

bldmake bldfiles

  这个命令会在group目录下生成一个abld.bat的批处理文件,并且会在C:Symbian6.1Series60Epoc32BUILD下生成C:Symbian6.1Series60Epoc32BUILDSYMBIAN6.1SERIES60SERIES60EXHELLOWORLDGROUP这个深的一个目录,并在最底层目录下生成一堆.make文件。实在理解不了为什么要这么搞?因为他们是生产手机的?

  虽然它生成了这么多东西,但是我们不要管,继续输入

abld build wins udeb

  这个命令会编译我们的程序,最后在C:Symbian6.1Series60Epoc32ReleasewinsUDEB目录下生成我们的helloworld,然后我们可以从开始菜单里运行模拟器的debug版,打开other目录就可以运行helloworld了。

  如果要在VC6里编译和运行HelloWorld,在运行完bldmake bldfiles后,运行abld makefile vc6,则会生成vc6的dsw文件,位置在C:Symbian6.1Series60Epoc32BUILDSYMBIAN6.1SERIES60SERIES60EXHELLOWORLDGROUPHELLOWORLDWINS。看Symbian把这点事搞得这么麻烦,也真是不容易。

  如果要直接在vc6里创建新项目的话,要把C:Symbian6.1Series60Series60Tools目录下的文件拷贝到vc6的模板目录下才可以。

  折腾到这里,可能得花2个多小时吧,剩下的两个多小时得看看文档了。

  先看看HelloWorld的帮助文档,理解一下Symbian程序的体系结构。Symbian程序也是按照VC的文档视图结构来组织程序的,有Application类CAknApplication,有Document类CAknDocument,有Frame类CAknAppUi,有视图类CCoeControl等,跟vc的结构好像是差不多的,但感觉上它的Document类好像是做样子的,我还没看到这一块。关于这些类之间的调用关系,在HelloWorld的文档里有个顺序图非常好,一看便知。

  在看Symbian的代码时,感觉最不适应的可能就是经常看到PushL和Pop函数,还有就是很多的函数都有L或LC的后缀。其实这是Symbian的例外处理机制。比如说我们定义了一个指针,给它分配了空间,可是在使用它的时候程序突然间出现了致命错误中止了,那这个指针占用的地址空间我们肯定是收不回来了,在PC上编程这一点可能问题不大,内存那么多,而且用不了多长时间就重启动了,但是Symbian的设计者可能认为这在手机上是不行的,所以对这一点做了很多的设计。Symbian有一个Clean up stack,在使用指针时,用PushL把指针压入栈中,使用完后在用Pop弹出栈,如果在中间调用可能导致崩溃的函数时果真出现了问题,那么Clean up stack可以通过调用该指针的析构函数回收占用的空间。这些可能导致崩溃的函数在Symbian里被称为可能Leave的函数,所以就在这些函数的尾部加了一个L。而加LC后缀的函数表明该函数已经在内部把指针用PushL压入clean up stack了,调用时无需再用PushL,直接调用完用Pop既可。Clean up stack还提供了一个PopAndDestroy函数,就是弹出栈后再销毁指针。顺便提一句,正式因为有了Clean up stack机制,所以Symbian在有些地方看起来跟VC的程序不太一样,比如说很多类的构造函数都不用,用NewL或NewLC构造,分配地址时的操作符new()也变成了new(ELeave)。上述内容可以看一下Symbian编程基础中的内存管理一节。

  Symbian自己定义了一堆的数据类型,如果不想找麻烦的话,还是乖乖的用这些类型的好。简单说一下,整型有TInt和TUint,其中又分为8位的,16位的和32位的,如TInt8,TInt16,TInt32;文本类型是TText,又细分为TText8和TText16,但内部都是Unicode的,所以实际上内部引用应该都是TText16;bool型是TBool,对应的值有ETrue和EFalse;浮点型是TReal,但又分为TReal32和TReal64;还有一个引用类型TRefByvalue,是以模板类的形式提供的。

  因为Symbian是冲着更面向对象设计的,所以在我们常见的字符串这块变化比较大,在Symbian里叫descriptor。最底层的是两个抽象类TDesC和TDes,实际上TDes也是继承的TDesC,TDesC中的C字母是常量constant的意思。即带C字母结束的都是定义的常量,是不可以修改的,而不带C的都有一个最大长度的限制,是可以修改的,下面也是同样的道理。指针描述符是TPtrC和TPtr,类似于C++中的char *;缓冲区描述符(Buffer descriptor)是TBufC和TBuf,类似于char [];堆描述符是HBufC,类似于(char *)malloc(length+1)的用法。具体用时,上述的类型又分为8位的和16位的。举个例子:

TBuf<64> buf;
CEikonEnv::Static()->ReadResource( buf, R_EXAMPLE_VIEW_TITLE );

  先定义了一个最大长度是64的缓冲区,然后读入名为R_EXAMPLE_VIEW_TITLE的资源。

  再例如:

TText8 *str = (TText8*)"示范窗口标题";
TPtrC8 source( str );
iInfoText = HBufC::NewL( source.Length() );
TPtr16 ptr = iInfoText->Des();

  定义一个8位的字符串str,然后构造一个指针常量source,根据source长度再定义一个16位的指针,下一步我这里没写,但明显着应该是把gbk的转换为unicode了。

  Symbian的资源文件一般是以rss为扩展名的,没有专门的资源文件编辑器,用户必须用记事本打开rss文件手工编写rss文件。这个都有一定的规则和方法,参考例子不难编写自己的资源文件。需要注意的一点是,如果资源文件里包含中文,那么必须把文件另存为utf-8格式的才可。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-126309/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-126309/


http://www.niftyadmin.cn/n/1440551.html

相关文章

[Mongodb] 5.nodejs连接Mongodb(1)

新建一个文件夹&#xff0c;生成npm环境&#xff0c;安装nodemon 新建一个index.js文件安装mongodb的npm插件: npm官网&#xff1a;npm官网搜索mongodb控制台中执行&#xff1a;npm i mongodb --savepackage.json中多了mongodb的依赖 4 定义mongodb客户端&#xff1a; co…

基础4

基础知识4 1.补充 margin的margin&#xff1a;0 auto&#xff1b;可以解决元素的居中&#xff0c;前提是给这个元素设置width。 2.css层叠的问题 css的两个性质 1.继承性&#xff1a;就是给父级设置的属性&#xff0c;同样也发生在了他的子代身上 2.层叠性&#xff1a;选择器的…

WPF制作Logo,很爽,今后在应用程序中加入Logo轻松,省事!

原文:WPF制作Logo,很爽&#xff0c;今后在应用程序中加入Logo轻松&#xff0c;省事&#xff01; 这是效果&#xff1a; XAML代码&#xff1a;<Viewbox Width"723.955078" Height"356.504883" xmlns"http://schemas.microsoft.com/winfx/2006/xaml…

[React] 11.React -ref的使用

要实现的功能&#xff1a;计算出‘增加’按钮距离浏览器顶部的距离&#xff0c;如下图所示 给按钮增加一个ref属性&#xff0c;一般来说&#xff0c;让它等于一个函数&#xff0c;该属性用于获取元素的dom&#xff0c;代码如下&#xff1a; <button onClick{this.handleB…

Delphi面向对象的编程方法(一)(转)

Delphi面向对象的编程方法&#xff08;一&#xff09;&#xff1a; Delphi的编程语言是以Pascal为基础的。Pascal语言具有可读性好、编写容易的特点&#xff0c;这使得它很适合作为基础的开发语言。同时&#xff0c;使用编译器创建的应用程序只生成单个可执行文件(.EXE)&#x…

使用python的paramiko模块对多台机器更新密码

废话不多说&#xff0c;直接上代码 #!/usr/bin/env python# -*- coding: utf-8 -*-from __future__ import print_functionimport paramiko def connect_modify(ip, username, password, newpass): paramiko.util.log_to_file(syslogin.log) client paramiko.SSHClient(…

[Mongodb] 6.nodejs连接Mongodb(2)

接上篇 一、查询数据 确定集合&#xff0c;查询指定集合的数据: // 切换到指定的集合const userCollection db.collection(users)userCollection.find().toArray((err, result) > {if (err) {console.error(查询数据出错, err)return}console.log(查询结果, result)})切换…

从今年的病毒发作情况看计算机病毒发展趋势(转)

随着因特网的普及和广泛应用&#xff0c;计算机病毒的传播形式有了根本的改变&#xff0c;用户感染计算机病毒的几率大大增加。今年以来至今&#xff0c;计算机病毒对国内计算机用户造成危害最严重的计算机病毒依次为&#xff1a;欢乐时光、Sircam和中国一号&#xff0c;它们均…