WEB开发网
开发学院手机开发Symbian 开发 Symbian开发入门 阅读

Symbian开发入门

 2010-06-03 23:07:00 来源:WEB开发网   
核心提示:TBufC一样:该类提供了一套赋值操作,允许整个缓冲区中的内容被替换掉;同样,Symbian开发入门(13),新内容的长度不能超过缓存区的大小,否则会引起系统异常;通过调用Des()方法,3.7字面量描述符(Literal Descriptors)下面我们来看看字面量描述符,它相当于C语言中的static char[]
TBufC一样:该类提供了一套赋值操作,允许整个缓冲区中的内容被替换掉;同样,新内容的长度不能超过缓存区的大小,否则会引起系统异常;通过调用Des()方法,可以返回一个可修改的指针描述符(TPtr),可以通过这个指针描述符来更改缓冲区中的内容。

_LIT(KPalindrome, "Do Geese see God?");

TBufC<20> stackBuf(KPalindrome);

// Allocates an empty heap descriptor of max length 20

HBufC* heapBuf = HBufC::NewLC(20);

TInt length = heapBuf->Length();// Current length = 0

TPtr ptr(heapBuf->Des()); // Modification of the heap descriptor

ptr = stackBuf; // Copies stackBuf contents into heapBuf

length = heapBuf->Length(); // length = 17

HBufC* heapBuf2 = stackBuf.AllocLC(); // From stack buffer

length = heapBuf2->Length(); // length = 17

_LIT(KPalindrome2, "Palindrome");

*heapBuf2 = KPalindrome2; // Copy and replace data in heapBuf2

length = heapBuf2->Length(); // length = 10

CleanupStack::PopAndDestroy(2, heapBuf);

记住,堆描述符可以按您的要求的尺寸动态分配内存,但它不会自动按您的期望更改缓冲区的大小。在修改缓存区 的内容之前,您要确保缓存区的内存是足够的。为了帮您简化这些操作,HBufC提供的一套ReAllocL()方法,它可以用来扩展堆的缓存区(这个操作有可能会使缓冲区从一个内存区域搬到另一个区域)。

如果您在HBufC上调用Des()方法来获取了TPtr, 在经过重新分配内存后,TPtr中的成员变量iPtr有可能变成无效的。因此,为了确保安全,在重新分配内存后,应该再次调用Des()来创建一个新的TPtr对象。

注:出于性能上的考虑,Symbian系统并没有提供可修改的堆描述符HBuf。

总结:Symbian系统中总共有5种类型的描述符,TPtrC,PTtr,TBufC,TBuf和HBufC。下面的图示表明了它们的继承关系。

3.7字面量描述符(Literal Descriptors)

下面我们来看看字面量描述符,它相当于C语言中的static char[]。字面量描述符是通过一系列的宏来创建的,这些宏可在头文件e32def.H中找到

#define _L8(a) (TPtrC8((const TText8 *)(a)))

上一页  8 9 10 11 12 13 14 15 16 17 18  下一页

Tags:Symbian 开发 入门

编辑录入:coldstar [复制链接] [打 印]
赞助商链接