欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

TInt GetL(TInt ain dex){ if(ain dex 0 | | ain dex=KArraySize){ user : leave(Kerr argument);else { return I array[aIndex];以计请记住这个功能 我们可以:TInt x errTRAP(err x=GetL(5));)如果(呃!=克尔

终极管理员 知识笔记 31阅读

None)
{
//输出错误信息等等
}
...首先注意函数名,这是一条规范: 凡是有可能离开的函数,名称都要以L结尾。这包括
在函数实现中使用任何形式的Leave (Leave, LeaveIfNull, LeaveIfError等等)和可leave的函数, 而又没有TRAP掉他们的的函数。以上的GetL函数当aIndex不在合法范围内的时候就会leave, KErrArgument是其原因(错误的参数)。 使用GetL函数的时候我们可以使用TRAP宏来捕捉离开, 所以当GetL 离开的时候, 就会输出错误信息等等。 使用GetL的代码并不一定需要TRAP只要把他自己声明为可离开的函数就可以, 但是要保证终归这些函数要被TRAP掉。 图形界面程序的框架在程序入口处提供了TRAP所以我们可以使用离开而不用TRAP一些普遍性的问题(比如内存不足)。但是文字程序一般需要我们自己提供TRAP. 另外还有一点就是, TRAP这个宏必须在一个CTrapCleanup的实例被创建以后才可以使用。 文字Helloworld中使用了头文件commonframework, 在Examples/basics/commonframework目录下, 我们可以看到:
CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
TRAPD(error,callExampleL()); // more initialization, then do example
//TRAPD是TInt error; TRAP(error,callExampleL()); 的缩写版。
delete cleanup; // destroy clean-up stack
也就是说当你的进程中还没有CTrapCleanup实例的时候, 你需要创建它才可以使用TRAP,当你不再使用TRAP的时候就删除这个实例。有了离开这个基础,我们下一课就可以讲CleanupStack 和 二层构造的概念了。 之后大家就不会觉得Symbian 程序中实例的构造看起来很复杂了。
标签:
声明:无特别说明,转载请标明本文来源!