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

Symbian开发入门

 2010-06-03 23:07:00 来源:WEB开发网   
核心提示:当写一个函数的时候, 如果参数是可修改的描述符,Symbian开发入门(17),实际上您不必考虑它是否有足够的空间用来存放数据,因为描述符本身有边界检查的机制, 代码如下所示:? Size() 和 Length()TDesC 实现了 Size() and Length() 方法, 前者返回描述符所占有的字节数,而后者返

当写一个函数的时候, 如果参数是可修改的描述符,实际上您不必考虑它是否有足够的空间用来存放数据,因为描述符本身有边界检查的机制,如果出现了内存溢出现象,会产生系统异常。

当然,您也可能不希望在描述符数据区过短的情况下,描述符的方法会发生系统异常。这时,您应当在文档中说明,如果描述符的长度不够将会如何处理。有时候,一个比较好的方法是,给调用者返回一个长度值,这样,调用者可以采用适当的步骤来分配一个正确长度的描述符。

HBufC* CPoem::DoGetLineL(TInt aLineNumber)

{// Code omitted for clarity. Allocates and returns a heap buffer

// containing the text of aLineNumber (leaves if aLineNumber is

// out of range)

}

void CPoem::GetLineL(TInt aLineNumber, TDes& aDes)

{

HBufC* line = DoGetLineL(aLineNumber);

CleanupStack::PushL(line);

// Is the descriptor large enough (4 bytes or more) to return an

// integer representing the length of data required?

if (aDes.MaxLength() < line->Length())

{

if (aDes.MaxLength() >= sizeof(TInt))

{// Writes the length required (TPckg is described later)

TPckg length(line->Length());

aDes.Copy(length);

}

// Leave & indicate that the current length is too short

User::Leave(KErrOverflow); // Leaves are described in Chapter 2

}

else

{

aDes.Copy(*line);

CleanupStack::PopAndDestroy(line);

}

}

另一个方案是,在函数中分配堆缓冲区,把它返还给调用者,由调用者负责销毁它。

3.9常用的方法

? Ptr()

基类TDesC 实现了Ptr()方法,用来访问描述符的数据,该方法返回一个指向字符数组首地址的指针。您可以通过这个指针来直接操作字符串数据。 代码如下所示:

? Size() 和 Length()

TDesC 实现了 Size() and Length() 方法, 前者返回描述符所占有的字节数,而后者返回的是描述符的字符长度。对8bit的描述符来讲,它们是相等的,而对16bit的描述来说,Size() 返回的数值是

上一页  12 13 14 15 16 17 18 19 20 21  下一页

Tags:Symbian 开发 入门

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