现在的位置: 首页 > 综合 > 正文

Descriptors的使用

2012年10月09日 ⁄ 综合 ⁄ 共 4224字 ⁄ 字号 评论关闭

原文地址:http://wiki.forum.nokia.com/index.php/%E4%B8%AD%E6%96%87_Descriptors%E7%9A%84%E4%BD%BF%E7%94%A8

 

任何Symbian的开发者都要对Descriptors 有所了解,因为在这里,无论是普通文本还是二进制数据,都要用到它,开发任何的应用软件,游戏或多媒体程序,也都要接触到它,在这里做个简单的介绍,自己也能重温并学习一下。以下内容摘自newlc的数篇经典文章,整理后也会加入了自己的一些内容和观点。

Contents

1 相关类的使用
  1.1 TPtrC<n>的使用
  1.2 TBufC<n>的使用
  1.3 HBufC的使用
  1.4 TPtr的使用
  1.5 TBuf<n>的使用
2 描述符主要特性
3 Litterals

 

相关类的使用

 

TPtrC<n>的使用
它指向了一组数据,但没有包含处理方法。它是从TDesC中直接继承下来的,只包括从父类中继承的那些函数,以及它自身的构造和设置函数。如何为使用这个对象呢?有如下几种方式:
 生成一个空的TPtrC对象,并使用Set()函数将它指向一组数据。

 在构造它时,就将数据传递进去。
例1:用TBuf和TBufC构造出TPtrC对象。

例2:用TText*构造TPtrC

例3:从另一个TPtrC中构造TPtrC

例4:从TPtrC中获得TText*

 

TBufC<n>的使用
例1:

TBufC<n>一般用来存储文本数据,而TBufC8<n>则用来存储二进制数据。尽管这里的对象表示数据是不能被修改的(因为有个后缀C代表了常量的意思),但仍然有两种方式可以用来修改数据: 
*这里的数据可以用赋值的方式替换掉。 
*使用Des()函数构造出一个TPtr对象,这样就可以用它来修改数据

下面是例子:

例1:

例2:通过使用Des()改变TBufC的数据

总结,这里TBufC时,我们通过Des()获得TPtr对象,因此获得了从TDes继承的一系列管理数据的方法。很好:)

 

HBufC的使用
当我们不知道数据大小时,我们可以使用它来处理,这里的C表示它是个常量,但同样有两种方式来修改它的数据。第一个是使用赋值操作,另一个也是使用可修改指针型Descriptor,如TPtr。
注意其大小可以通过ReAlloc函数来重新分配。

 

TPtr的使用
通过上面的介绍,我们已綺看到它的使用方式,这里可以看看如何来构造它:
*通过另一个TPtr对象
*通过TBufC,HBufC的Des()方法获取
*通过内存中的确定指针和大小长度来生成
 

 

TBuf<n>的使用
这个对象的操作和从TBufC<n>中通过获得TPtr对象的进行的数据操作一样,可以Copy,Delete和赋值等。

 

描述符主要特性
*以同样的方式对待字符串和二进制数据。
*数据可以存放在内存的任何区域上——ROM或RAM,在堆或栈上都可以。
*描述符使用指针和长度信息来描述它包含的数据,有些描述符还包括最大长度的信息。

 

所有的描述符都是从抽象类TDesC中派生的,他们可以分为三个大类:
*缓冲区描述符——数据做为描述符对象的组成部分而存在,描述符对象存放在程序的堆栈中:TBuf和TBufC,
*堆描述符——数据做为描述符对象的组成部分而存在,描述符对象存放在堆中:HBufC,
*指针描述符——描述符对象和它所表示的实际数据是分开存放的:TPtr和TPtrC.

 

如果对照C/C++语法来看:
*TPtrC可以被看作是const char*的使用
*TBufC可以被看作是char[]的使用
其他类没有相应对照语句。

 

TDes和TDesC是抽象类,因此你不可能实例化它们。它们的主要用途是做为函数的参数来描述字符串和二进制数据。

在这样的函数中,你应该按如下规则使用:

1、const TDesC& 表示只读的数据和字符串。

2、TDes& 表示可以被修改的数据和字符串。(我们所看到大多数涉及Descriptor参数的函数和方法都使用了他们来描述)

 

Litterals
字符串常量可以使用_L()或_LIT()宏来定义。
 _L()可以生成一个指向字符值的地址(TPtrC),它綺常被用来传递字符串到函数中:
NEikonEnvironment::MessageBox(_L("Error: init file not found!"));

 _LIT()可以生成个常量名,以便以后重复使用:
_LIT(KMyFile, "c:/System/Apps/MyApp/MyFile.jpg");

 _LIT()宏的结果(就是上面的KMyFile)实际上是个文字描述符(literal descriptor)TLitC,它可以在任何使用TDesC&的地方使用。

 

用法
________________________________________
TDesC中最常用的函数如下:
 Ptr(),用来获得描述符数据中的指针。
 Length(),用来获得描述符数据中的字符数。
 Size(),用来获得描述符数据中的字节数目。
 Cpmpare()或操作符==、!=、>=和<=等专为比较描述符数据用的。
 操作符[],可以被当作c/c++中一样,用来获得描述符字符串中的单个字符。

 

抱歉!评论已关闭.