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位的数据内容。通常情况下,你可以使用更加自然的文本数据的表示形式:TDes,TDesC.
字符串常量的定义
字符串常量通常可以利用_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
No comments:
Post a Comment