五小时Symbian开发入门(转)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
 

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目录下的Epoc32/BUILD目录,因为这个目录以后要反复的用到。

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

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

bldmake bldfiles

这个命令会在group目录下生成一个abld.bat的批处理文件,并且会在C:/Symbian/6.1/Series60/Epoc32/BUILD下生成C:/Symbian/6.1/Series60/Epoc32/BUILD/SYMBIAN/6.1/SERIES60/SERIES60EX/HELLOWORLD/GROUP这个深的一个目录,并在最底层目录下生成一堆.make文件。实在理解不了为什么要这么搞?因为他们是生产手机的?

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

abld build wins udeb

这个命令会编译我们的程序,最后在C:/Symbian/6.1/Series60/Epoc32/Release/wins/UDEB目录下生成我们的helloworld,然后我们可以从开始菜单里运行模拟器的debug版,打开other目录就可以运行helloworld了。

如果要在VC6里编译和运行HelloWorld,在运行完bldmake bldfiles后,运行abld makefile vc6,则会生成vc6的dsw文件,位置在C:/Symbian/6.1/Series60/Epoc32/BUILD/SYMBIAN/6.1/SERIES60/SERIES60EX/HELLOWORLD/GROUP/HELLOWORLD/WINS。看Symbian把这点事搞得这么麻烦,也真是不容易。

如果要直接在vc6里创建新项目的话,要把C:/Symbian/6.1/Series60/Series60Tools目录下的文件拷贝到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<T>,是以模板类的形式提供的。

因为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格式的才可。

入门相对来说是比较简单的,但精通就需要大量的实践了。
Symbian开发流程与实战详解 本文还有配套的精品资源,点击获取 简介:Symbian操作系统曾是智能手机市场的主流,本资料详细讲解了Symbian开发的基础知识,包括环境搭建、开发语言选择、签名与权限配置,以及完整的开发流程。适合初学者通过实战学习如何开发适用于Symbian系统的应用,涵盖从设计、编码到测试和发布的各个步骤。 1. Symbian环境配置指南 在探索移动开发世界中,Sy... 阅读详情

相关推荐

Symbian OS C++移动开发全面指南:从入门到S9版本应用开发

本文还有配套的精品资源,点击获取 简介:《Symbian 开发三步曲》是一套详尽介绍Symbian OS C++开发的书籍,分为三部分,涵盖基础开发、高级功能和S9版本特定应用开发。第一部分专注于在资源受限的移动设备上编写高效C++代码和系统服务开发。第二部分深入探讨网络编程、多媒体、蓝牙通信等扩展功能,以及性能优化。第三部分专注于S9版本的新特性,包括安全性和用户界面改进...

weixin_35754676的博客 1117

symbian应用程序类型介绍

EXE程序介绍当我们的应用程序并不需要用户界面,只需要使用一个单独进程的时候,我们可以创建.EXE 程序。.EXE程序包含一个主入口E32main(),当系统通过E32main()启动的时候,系统会创建新的进程,并在此进程中创建新的线程。在创建EXE 程序时,我们需要在.mmp文件中将程序的TARGET指定为 EXE 。EXE通常是服务端或命令行程序,通常隐蔽的运行,他没有GUI,不能直接从主菜单

cool_li的专栏 1043

从J2ME学Symbian游戏开发()

相信在手机游戏开发这块是J2ME的天下,一是因为它简单容易学,二是因为关于它的资料多。 而J2ME毕竟是运行在Symbian OS的内核之上的,速度慢也是必然的了,更不能忍受的是它把很多与底层的交互封装了起来,并且不提供接口让你访问。 这对于我这样喜欢刨根问低的人来说,是实在无法忍受的! 其实真正了解了Symbian OS和相应的Series 60,如果在这个平台上做游戏开发的话,S...

编程开发资料库 277

Symbian开发简介

Symbian开发简介--简单介绍Symbian上的应用软件开发过程篇首语:Symbian出来已经很久了,其上的应用软件开发应该很成熟了。。。SymbianOS1。Symbian上的应用软件开发主要用Symbian C++,当然Open C/C++,JAVA(J2ME),Web Runtime (WRT) widgets也行。 IDE用 Carbide.c++(对Symbian C++来说,其它语

demingyin的专栏 818

[]五小时Symbian开发入门

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

dianmu2198的博客 184

五小时Symbian开发入门

来源:http://www.sxsoft.com/technology_test/show_news.asp?id=211Symbian是一个操作系统,是以Nokai为首的各手机厂商合伙攒的一个操作系统,主要用于高端的智能手机。其开发语言为C++,可以使用Microsoft Visual C++ 6.0作为集成化的开发环境,看来虽然Symbian的目标是跟微软的SmartPhone较劲,在采取的手

无烟会议室的专栏 产品|编程|软件工程|管理|游戏|电子书 1573

[载]Symbian开发系列 - 入门

 要开始我的Symbian开发之旅了, 先收集一些相关资料,如Symbian概述, 开发平台搭建, 参考书籍与网络资源.【基础】什么是Symbian学习Symbian的基本概念 Symbian操作系统 Symbian 入门symbian操作系统 入门symbian 术语表 S60/Symbian应用程序常用架构/框架S60十大优秀软件S60 系统手机类型及所用操作系统S60 和

fsyiyun的专栏 960

()基于Carbide.C++的 S60 开发环境的配置

<br /><br />Symbian^3(PDK 3.0.0)已经发布有段日子了,但是你知道如何利用工具快速搭建一个Symbian开发平台吗?如果想了解如何手动的生成工程并编译运行又该做呢?且看本文给你解答!<br />51CTO专题:Symbian应用开发详解<br />一、Symbian OS简介<br />Symbian OS是一个专为移动设备而定制的操作系统。在全球智能手机操作系统的市场份额中,处于领先地位,现在该系统主要应用在Nokia的智能手机上。<br />Symbian OS系统按照人机界

hzl877243276的专栏 676

微软技术日报 2026-09-08:Patch Tuesday 任务栏自由了,GPT-6 Astra 四平台齐发

今天推送的 9 月补丁让 Windows 11 找回了任务栏与开始菜单的自由,而 Copilot 一周内接入两大前沿模型、Studio Harness GA,则标志着微软的"智能体平台化"从口号进入账单期——本地跑大模型(Project Zenith)与云端多模型编排(Copilot Studio)两条路线正在同时加速。

海盗Sharp的博客 373

微软技术日报 2026-09-09:Project Opal 自主智能体亮相,Patch Tuesday 966 漏洞含 2 零日

每天 5 分钟,速览微软技术圈最新动态。今日看点:Project Opal 让 Copilot 学会"自主干活"、创纪录的 966 漏洞 Patch Tuesday、WinUI 3 三十分钟速成新范式。

海盗Sharp的博客 287

GitHub今日热榜 | 2026-09-08:微软 markitdown 冲进前三

<think>好的,用户需要根据提供的GitHub趋势榜内容,写一篇不超过150字的文章摘要。内容包含榜单变化、亮点项目和分析。需要简洁覆盖核心要点:今日榜单变化大,新进8个,两个持续项目撑住,微软markitdown和字节deer-flow等新面孔上榜,主题是AI Agent工具链。控制字数。 先梳理关键信息:今日榜单10个中8个是新进,昨日霸榜项目集体跌出,ECC和FckSignups持续。微软markitdown冲至第二,字节deer-flow等新项目上榜,主线是AI Agent技能与工具链。需要把这

m0_68631449的博客 395

【LibreCAD 2D架构】从 addHistory 到 RS_UndoCycle:LibreCAD 里的两套 History 与撤销机制

本文完整拆开 LibreCAD 的两套 History:文档级撤销 RS_Undo 只是翻 FlagUndone 标志位,实体并非被删除,在界面上表现为隐身;只有重做分支被丢弃时,才由 removeUndoable() 真正删除。撤销以 RS_UndoCycle 为单位分组,三步曲决定了每一次撤销的粒度。另一套是 RS_ActionDrawLine 内部的 pPoints->history,记录的是交互走到哪一步。两者在画线回退时握手:交互回退负责导演,RS_ActionEditUndo 负责把线收回去。

Linux、C++、图形软件开发等。不一定每次都能写出完美的代码,但会认真搞懂每一个问题。 4387

专项事件体系

专项事件体系是浏览器针对特定业务场景提供的垂直事件集合,覆盖表单交互、剪贴板操作、拖拽交互、页面状态、网络状态等专项业务场景,能够精准响应特定功能的状态变化与用户操作。 这类事件针对性强,具备专属的事件对象属性与操作方法,是实现对应业务功能的核心事件支撑。

2401_83227843的博客 91
own8888
博客等级 码龄25年 0粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值