RECORDING MY FANTASY

Tuesday, November 22, 2005

s60的字符串描述符翻译-from www.sf.org.cn

Symbian平台的主要的描述符的特点现归纳如下:
1      字符串和二进制数据采用相同的处理方法
2      数据可以被放置到任意的存储器中,无论是ROM还是RAM,也无论是在栈上还是在堆上。
3      每个描述符对象(descriptor object)都包含了指向数据的指针和该指针指向的数据的长度信息。一些描述符甚至包括了其最大可以容纳的数据长度。

 

下面的图例表示出了描述符类之间的派生层次关系,

http://www.newlc.com/IMG/png/descriptors.png

所有的描述符都是从TDesC这个虚基类中派生出来的。这些描述符总的来说分为三种:
1      缓冲区描述符:TBuf类和TBufC

2)         堆描述符:典型例子是:HBufC

3)         指针描述符:TPtr类和TPtrC 

指针描述符可以用来等价替换经典C/C++中的以下两种类型:
a)      TPtrC ――
const char *
b)      TbufC ――
char []
但是其他的类在经典C/C++中就没有相应的数据类型了。

TDes类和TDesC类是虚基类,所以你不能够直接将他们实例化。它们主要用于做为函数的形参,方便的操作字符串和二进制的数据。

在这种类型的函数中,你可能会用到:
1      const TDesC& 做为只读的字符串或二进制数据的传递
2      TDes & 做为你需要修改的字符串或数据在函数间的传递

 

所有的描述符都有单位数据的宽度的限制,例如:TDes8,TDes16,TDesC8,TDesC16,TBuf8, TBuf16,等等,其中的后缀8代表了这个描述符是用来操作8位的数据的,而16则代表可以操作16位的数据内容。通常情况下,你可以使用更加自然的文本数据的表示形式:TDesTDesC.

 

字符串常量的定义

                字符串常量通常可以利用_L()宏和_LIT()宏来定义

_L()
宏从常量字符串中可以得到TPtrC的指针,它在向一个函数传递字符串常量的时候尤其有用。例如:
NEikonEnvironment::MessageBox(_L("Error: init file not found!"));

_LIT()
用于生成在程序中可以重复使用的、全局的常量字符串,并且可以为该字符串方面的命名。例如:
_LIT(KMyFile,"c:\\System\\Apps\\MyApp\\MyFile.jpg");
上面这条宏的结果就是:KmyFile可以做为后面字符串的代替品,用在任何需要传入TDesC&参数的地方。

 

使用方法:
最常用的函数都定义在TDesC虚基类中。列举如下:
1      Ptr()――用于得到指向描述符中数据的指针
2      Length()――用于得到描述符中数据单位的长度(或者在存放字符串时表示字个数)
3      Size()――用于以字节为单位表示描述符中数据的长度
4      Compare()以及重载的==!=>=<=用于描述符对象之间的比较
5      重载的[]运算符,用于从一个描述符中取出指定的一个数据单位,类似数组的使用方法

 

 

 

---
Best Regards,
Xi Minjun(
郗闽军)
the Lab of Distributed and Mobile Computing
Beijing University
of Aeronautics&Astronautics

 

No comments: