Descriptors的使用

原文地址: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++中一樣,用來獲得描述符字符串中的單個字符。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章