您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > Symbian C++ 开发
SymbianC++开发SymbianOS分层UI框架(UI工具包、UI应用程序框架)应用程序服务(PIMAPP服务、Office引擎、其他App服务、消息传送App服务、数据同步服务、PIMApp支持、消息传送程序支持、网络程序支持、应用程序框架、打印支持)OS服务(通用服务、多媒体、通用库、通话服务、串行通信与短程连接服务、网络服务、图形服务、连接性服务)基本服务(低层库和框架、文本模式Shell、用户库与文件服务器、用户端硬件抽象)内核服务和硬件接口(内核服务、文化区域、逻辑设备驱动器、主板支持包、物理设备驱动器)每一层均抽象下一层的复杂性,并为上一层提供服务每一层中,组件均按照功能封装(组合在集合里)OS服务层通过把集合组合成更广泛的包或相似技术套件,进一步进行封装。编写优秀的SymbianOS代码一般技巧设计技巧编码技巧测试技巧调试技巧一般技巧Symbian开发人员网络站点()提供了有价值的信息来帮助编写应用程序。Symbian的授权使用者还可以运行开发者相关的程序。Symbian开发人员网站提供了SymbianOSFAQ数据库(),对于开发者是无价的信息资源,它涵盖了设计和编码中最经常问到的问题。设计技巧最重要的SymbianOS设计技巧就是将“引擎”和UI代码分置在不同的模块中。要始终注意,让设计支持本地化。注意坚持使用有说明文档并得到SDK和SymbianOS版本支持的API。编码技巧保证应用程序可以响应系统关闭事件。要响应输入的系统事件。SymbianOS上的内存处理是一个关键问题。KERN-EXEC3崩溃通常是栈溢出的征兆——按照SymbianSDK的建议,优先使用堆来代替栈。低内存条件下,完美处理错误很重要——一个应用程序出现错误,表明代码中的确存在漏洞。对于具有Close()方法的R类,总是使用CleanupClosePushL()。另外,记住清除栈是一种可扩展机制、可以用于异常退出时清除任何东西。在删除成员变量HBufC后,总是将其置为NULL。如果有理由使用自己的TRAP,那么不要忽略所有的错误。不要等待通过PushL()将对象清入清除栈。注意在名称中带后缀C的函数自动将对象放入清除栈中。两阶段构造是SymbianOS内存管理的一个关键部分。代码中不要使用_L()宏。当使用描述符作为函数的参数时,默认时使用基类。活动对象(AO)是SymbianOS功能中的一个关键部分。尽可能使用活动对象框架。对于即时性游戏,编写忙碌的应用程序时,ViewSrv11错误是一种危险。不需要利用HBuf::Des()来使用HBufC。使用标准应用程序.INI文件功能时,确认在流中写入了版本号信息。测试技巧最重要的测试技巧是在模拟器下退出应用程序,而不是仅仅是关闭整个模拟器。另一个重要的技巧是,保证正确的平台依赖信息在部署前就已包含在.PKG文件中。编写.PKG文件时,还要保证在适当的地方使用!:\语法。调试技巧编写和调试新控制类时,将iEikonEnv-WsSession().SetAutoFlush(ETrue);放入AppUi的ConstructL()函数中。如果关闭时应用程序由于内存泄漏而出错,将泄漏地址转换为CBase*,通常可得到泄漏对象的类型。对SymbianOS开发者很重要的一个新增功能是目标式调试。开发人员资源SymbianOS软件开发包取应用程序的UIDSymbianOS开发人员工具支持论坛SymbianOS开发者培训开发者组织链接SymbianOS参考书开放源代码项目SymbianOS软件开发包(SDK)UIQ()NokiaSeries90()NokiaSeries60()NokiaSeries80()取应用程序的UIDUID是一个32位数,在需要时从Symbian获得。发送email至uid@symbiandevnet.com,标题为UIDrequest保留范围的UID:0x01000000–0x0fffffffSymbianOS开发人员工具AppForgeBorlandForumNokiaMetrowerksSunMicrosystemsTexasInstrumentsSymbianDevNet工具编译生成概述编译器和IDE命令行生成使用IDE编译器和IDEBorlandC++Builder6移动版和BorlandC++BuilderX移动版MetrowerksCodeWarriorMicrosoftVisualC++版本6命令行生成bld.inf和.mmp文件bldmakebldfilesabldbuildplatformbuildtypebuildtype:udeb和urel,allplatform:WINSB和WINSCW、WINS用于不同编译器下的模拟器ARM4、ARMI、THUMB面向实行目标手机基础知识命名规则与数据类型内存与资源管理活动对象客户/服务器命名规则与数据类型命名规则类名T类C类R类M类静态类函数名(a、L、C)数据成员(i)常量(k)枚举(T、E)命名规则与基本数据类型基本数据类型整型:TInt8,TUint8,TInt16,TUint16,TInt32,TUint32,Tint,TUint实型:TReal32,TReal64,TReal,TText8,TText16布尔型:TBoolTAny描述符内存与资源管理SymbianOS内存设置RAM(每页4K)和ROM(Z盘)文件服务器访问(C盘)一个线程的栈的大小在线程启动以后就不能再增加了。一个线程的缺省的堆用来满足操作new和用户库函数。DLL中不允许可写的静态变量,DLL只允许只读数据和程序代码异常处理对策编程必须更加有效,节省使用内存。尽可能早地释放资源。必须处理内存不足的错误。当发生内存不足错误时,终止某些操作,决不能丢失任何数据,而必须返回到一个可接受的一致状态。在一个涉及许多资源分配的操作进行过程中,若发生了内存不足现象,则作为撤销过程的一部分,必须清除所有这些资源机制:TRAP和LeaveCleanup栈两步构造函数严重错误User::PanicstaticvoidPanic(TintaPanic){_LIT(KPanicCategory,“MY-APP”);User::Panic(KPanicCategory,aPanic);}断言宏enumTMyAppPanic{EMyAppIndexNegative=12,}_ASSERT_ALWAYS(aIndex0,Panic(EMyappIndexNegative));异常退出与捕获异常退出(Leave)(TRAP和TRAPD宏)TRAPD(error,HandleKeyL());if(error){RevertUndoBuffer();User::Leave(error);}清除栈在需要时使用清除栈CleanupStack::PushL()本身失败时的情况CBase和清除栈两阶段构造在NewL()和NewLC()中包装ConstructL()其他形式的清除描述符缓冲描述符(TBuf和TBufC)指针描述符(TPtrC和TPtr)堆描述符(HBufC)可修改和不可修改描述符基础类结构TDesC和TDes,TBufCBase在接口中使用抽象类文字_L和_LIT标准描述符函数操作数据:Insert、Append、Copy、Delete、Replace子字符串函数:Left、Right、Mid格式化:Format、AppendFormat表示二进制数据TBuf8256用8位字符或16位字符HBufC::Des()返回TPtr对象活动对象异步服务:非抢占式多任务处理活动对象的RunL()函数活动对象使用方法构造清求和处理事件RunL的错误处理取消请求简单控件所有对屏幕的操作都是在控件上进行的,控件可以处理用户的输入事件,包括键盘事件、鼠标事件等。CCoeControl是所有控件的基类初始化、绘图、用户输入处理初始化创建控件的窗口设置控件的大小激活控件绘图获取图形上下文(GraphicsContext,GC)画笔Pen刷子Brush字体Font当前位置原点剪辑区域绘图函数:点、线、实心轮廓图形、位图、文本重绘:DrawNow和DrawDeferred用户输入处理OfferKeyEventL和HandlePointerEventLAddToStack和RemoveFromStack复合控件包含其他控件的控件,也称为容器。复合控件中的子窗口共享主控件的窗口。CountComponentControls()和ComponentControl()Draw()SizeChanged()事件转发常用控件文本标签EEikCtLabel按钮命令按钮、选项按钮、复选框编辑器文本编辑器数字编辑器秘密编辑器多字段编辑器列表选择列表、多选列表、标记列表、菜单列表、设置列表对话框对话框的基类是CEikDialogS60使用CAknDialog专用对话框通知对话框及其派生询问对话框及其派生表格对话框列表对话框表格对话框
本文标题:Symbian C++ 开发
链接地址:https://www.777doc.com/doc-3644382 .html