Symbian基本规范

DLL中的可写静态数据

Symbian OS是基于ROM来处理程序的。DLL是通常是存储在ROM中的(运行也是在ROM中),所以它是不可写的。虽然有时把DLL装入RAM中运行,但Symbian OS仍旧假定DLL不可写。因此Symbian OS中的DLL没有数据段(Data Segment ),这就导致了DLL中不能包含有可写的静态数据,不管其是否被初始化。

静态数据是在函数之外定义的任何数据,例如:TbufC<20> filename;Void SetFileName()

{………………

}许多现在的程序广泛的使用了静态数据。在基于Windows的PC上运行模拟器并不会产生任何问题,因为DLL使用的是Windows下的DLL机制,而Windows下的DLL是允许有可写数据的。任何这样的代码不能被其它平台编译,编译失败并从pertran返回一个警告(pertran是为其它平台编译的最后一阶段使用的工具)。Pertran产生类似下的警告的信息:ERROR: Dll 'MENUITEMS[10008AD0].APP' has uninitialised data.为了消除这个错误必须从DLL中除去所有的可写静态数据。

DLL中含有数据(可写的)在一些情况中是很有用的,所以Symbian OS提供了一种机制允许DLL基于每个线程(per-thread basis)管理很少数量的私有存储区------线程本地存储(Thread Local Storage, 可以参考SDK文档Threads and Processes Overview和例子(Symbian\7.0s\Series60_v20\Examples\base\threadsandprocesses下的tls1和tls2)。这种机制使得每个DLL的使用者看不到同一个DLL的其它使用者的私有存储区(Thread-Local Storage)。

移植策略去掉可写的静态数据是一个很重的任务。一般情况下,你需要把所有的静态数据放到一个struct里,然后在那些需要用到的地方通过指针访问这个结构。

下面是使指针可用的几种方法,包括:1.在每个用到的函数中把指针添加为参数。这种方法需要考虑的是代码的改变——不仅仅是那些直接使用静态数据的函数,还包括间接调用该函数的函数。

2.使用上面提到的DLL线程本地存储(Thread-Local Storage)。这种方法可能会引起一些性能上的问题,因为使用它的DLL函数要比直接解引用指针复杂的多。

3.把指针存储在那些需要用到它的struct和class中。这也会引起一些代码的改变,但是消除了需要改变间接调用函数的缺点和频繁访问线程本地存储(Thread-Local Storage)的缺点。

在实践中,经常需要结合上面的3种方法来使用,以达到代码和性能的最小改变。

设计策略新的代码在设计时应该避免使用可写静态数据。在面向对象系统中,不用考虑全局数据与对象一起通过指针传递的情况,因为可以通过this指针调用非静态成员函数来访问对象的所有成员。

通过适当的面向对象设计可以很自然的避免可能用到可写静态数据的情况。

隐式使用可写静态数据有时可通过隐式的方法来使用可写静态数据,例如:const TRgb(255,255,255) KRgbWhite;定义一个不会被Symbian代码改变的常量。然而,TRgb是一个类,为了构造这个常量,必须在运行时调用其构造函数,因此对设备来说这个常量是可写的。

要避免这种情况可以通过下面的代码定义常量:#define KRgbWhite TRgb(255,255,255)

这样类的构造函数就被移到使用点上才被调用而不是DLL被加载时。

EXE中的可写静态数据在EXE中不限制使用可写静态数据。做为server的EXE可能需要可写静态数据。

线程本地存储(Thread-Local Storage)

Symbian OS中的线程本地存储(Thread-Local Storage)允许每个DLL的每个线程可以有一个机器字的静态数据。这个字只能被每个DLL线程的DLL代码访问。也就是说同一个DLL的不同线程拥有不同的一个机器字空间而且它们之间是不可见的。

Dll类提供了使用线程本地存储(Thread-Local Storage)的接口。只需要调用它的静态成员函数SetTls(),Tls()就可以存储/访问线程本地存储(Thread-Local Storage)的数据了。具体可以参考SDK文档和例子(Symbian\7.0s\Series60_v20\Examples\base\threadsandprocesses下的tls1和tls2)

时间: 2024-09-12 04:54:44

Symbian基本规范的相关文章

Symbian基本规范:命名约定

概要 Symbian OS上的应用程序使用一组标准的约定来命名类(class).结构(struct).变量(variable).函数(function).宏(macros).枚举(enumeration)和常量(constant).本主题解释这些约定的意思. 类(class)的命名 大多数类的命名是通过加前缀字符C,T,R,M构成的.下面简单说一下它们表示的意思: C:C前缀表示类从CB ase派生并应该基于堆构造. T:T前缀表示一个简单类,这种类不拥有任何额外的资源. R:R前缀表示一个资源

Symbian基本规范:描述符

概要 描述符既是Symbian OS中基本的东西,同时也是比较非面向对象(non-OO)和面向对象(OO)设计方法的极好的例子. 在C语言中字符串是下面这样的: char *hello = "hello"; 上面的语句使设置一些内存使其包含'h','e','l','l','o','\0'6个字符.strlen()函数从开始字节扫描内存直到以空字符('\0')结尾.如果你想扩展字符串,你需要知道给它分配了多少内存. 描述符抽象 通过两个抽象类表示出字符串的基本需要:TDesC和TDes.

Symbian系统开发专题

symbian入门系列:applicatoin对象研究 symbian入门系列: framework symbian入门系列: document对象分析 Symbian学习总结-基础篇-Symbian C++中的异常处理 Symbian框架 Symbian游戏编程应用程序开发 Symbian开发工具Carbide简介 Symbian内存管理的二十二条军规 Symbian学习笔记(21)--原来还有这个工具wsdl2cpp,访问webserv Symbian学习笔记(20)--用gSOAP更简单地

Symbian框架

Symbian开发的软件大小一般在200k左右, 屏幕大小为:176*208(老版本) 240*320(新版本主流) 352*416(新版非主流); Symbian的程序是运行在AppRun.exe的程序上面,AppRun类似虚拟机的概念; 注意:Symbian不允许有全局变量,但支持全局常量.(在3.0中,Exe支持,DLL不支持) 以下介绍Symbian的框架部份,一些基本的部分就不详解了: 1.框架程序入口:E32DLL:该方法将程序启动路径给RunApp进行启动,在启动之前会加载这程序所

国外英文的移动设备网页设计UI规范

文章描述:移动手持及平板电脑和网页应用设计UI规范. Official user interface (UI) and user experience (UX) guidelines from the manufacturers, links to which you can find below, are a source of inspiration for mobile web and app design. Here, you will find guidelines, samples,

Symbian编程总结-基础篇-动态缓冲区(1)-回顾HBufC

当数据尺寸在编译期不固定,而在运行期有可能要扩展到很大尺寸时,动态缓冲区在保存二进制数据方面显得非常有用.我们可以使用C++数组保存二进制数据,然后调用类似于memcpy的函数去动态的改变数组所占用空间的大小:我们还能够使用HBufC描述符,获取其可修改的描述符向其写入数据,然后调用ReAlloc方法扩展数组.以上两点方法可行,但是不好,因为我们得自己管理内存的分配.Symbian C++考虑到了这一点,于是引入了动态缓冲区的概念. 基于堆的缓冲描述符HBufC的前缀H显然不符合Symbian

Symbian OS基本数据类型

Symbian OS使用的是面向对象的C++,但是又和标准的C++有一些区别.比如Symbian OS没有标准的异常处理(Exception),因为设计Symbian OS的时候还C++还没有把异常处理标准化.所以Symbian设计了自己得异常处理机制: TRAP, leave.另外就是今天要讲的基本类型.Symbian 基本上不使用任何标准的C++基本类型,众所周知,不同的C++编辑器对int, unsigned int的长度理解不同,所以Symbian OS中使用 TInt8,TInt16,

Symbian OS及通讯技术术语全解(下)

GSM Global System for Mobile communications, the most widely used digital mobile phone system and the de facto wireless telephone standard in Europe.Originally defined as a pan-European open standard for a digital cellular telephone network to suppor

Symbian OS及通讯技术术语全解(上)

Symbian OS和一些相关资料,内容不少,而且有些很专业.刚刚才收集整理了一份技术术语白皮书,在这儿先放上来,大家共享. 1G In mobile telephony, first-generation systems were analog, circuit-switched.Voice links were poor, handoff unreliable, capacity low, and security non-existent.1G systems are not now un