Symbian开发入门
2010-06-03 23:07:00 来源:WEB开发网当写一个函数的时候, 如果参数是可修改的描述符,实际上您不必考虑它是否有足够的空间用来存放数据,因为描述符本身有边界检查的机制,如果出现了内存溢出现象,会产生系统异常。
当然,您也可能不希望在描述符数据区过短的情况下,描述符的方法会发生系统异常。这时,您应当在文档中说明,如果描述符的长度不够将会如何处理。有时候,一个比较好的方法是,给调用者返回一个长度值,这样,调用者可以采用适当的步骤来分配一个正确长度的描述符。
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() 返回的数值是
- ››Symbian S60 SocketConnection参数
- ››开发学院教你用SQL 语句最快速清空MySQL 数据表的...
- ››Symbian乏力:2010年诺基亚悲情大事记
- ››Symbian三大升级开启2011年新战略
- ››Symbian/Android/iOS/WM安装包对比
- ››Symbian一个活动对象的测试例子
- ››Symbian ListBox控件
- ››Symbian下自动切换SDK的批处理代码
- ››Symbian 3 版的 Swype 输入法正式上架
- ››Symbian中的设计模式
- ››Symbian S60平台JAVA开发环境搭建步骤
- ››Symbian自定义控件—如何实现跑马灯效果
更多精彩
赞助商链接