#include <e32base.h>
#include <e32cons.h>
#include <e32std.h>
// 定义本地数据
LOCAL_D CConsoleBase* console;
LOCAL_D TInt err;
//定义本地代码
LOCAL_C TInt Ex_1_L(TInt,TInt);
LOCAL_C TInt Ex_2_L(TInt,TInt);
LOCAL_C TInt Ex_3_L(CConsoleBase*);
//全局函数,被 E32 调用的主函数,
GLDEF_C TInt E32Main()
{
// 定义一个 Descriptor,作为Console的标头显示
_LIT(TITLE,"\nLeave 测试\n");
//存放一组二维值,分别表示长和宽
TSize Ts=TSize();
//设置这组值
Ts.SetSize(-1,-1);
//在 e32base.h 中定义了Console 类 ,NewL() 这个类的静态方法。
console=Console::NewL(TITLE,Ts);
TInt i=0;
TKeyCode key;
while(i<1000)
{
//断言处理:按 Esc 键 终止线程并退出
__ASSERT_ALWAYS(key!=27,User::Panic(_L("End Thread"),key));
key=console->Getch();
console->Printf(_L("step[%d]:%c \n"),i++,key);
// 按 T 键
if (key==116)
{
console->Write(_L("[T]请输入A和B的值:\na="));
//从键盘输入
TInt a=console->Getch();
//把输入码转为0-9的数字
a=a-48;
console->Printf(_L("%d"),a);
console->Write(_L("\nb="));
TInt b=console->Getch();
b=b-48;
console->Printf(_L("%d\n"),b);
//使用 Trap 宏设置 code point,
//函数在Trap Harness的保护下运行
TRAP(err,Ex_1_L(a,b));
//输出错误码
console->Printf(_L("err=%d\n"),err);
//错误处理
if(err==2)
{
console->Write(_L("错误:a不能大于b!\n"));
err=KErrNone;
}
}
// 按 C 键 清楚屏幕
if (key==99)
{
console->ClearScreen();
}
// 按 S 键
if (key==115)
{
console->Write(_L("[S]请输入A和B的值:\na="));
//从键盘输入
TInt a=console->Getch();
//把输入码转为0-9的数字
a=a-48;
console->Printf(_L("%d"),a);
console->Write(_L("\nb="));
TInt b=console->Getch();
b=b-48;
console->Printf(_L("%d\n"),b);
//使用 Trap 宏设置 code point,
//函数在Trap Harness的保护下运行
TRAP(err,Ex_2_L(a,b));
//输出错误码
console->Printf(_L("err=%d\n"),err);
//错误处理
if(err<0)
{
console->Write(_L("错误:值不可以小于零!\n"));
err=KErrNone;
}
else
{
console->Write(_L("没有Leave发生!\n"));
}
}
// 按 D 键
if (key==100)
{
CConsoleBase* cnsx=console;
cnsx->Write(_L("我是cnsx指针\n"));
console->Write(_L("是否要取消cnsx 指针?y/n \n"));
TInt ch=console->Getch();
if(ch==121 || ch==69)
{
cnsx=NULL;
}
else
{
cnsx->Write(_L("我还在那!\n"));
}
//设置Code Point
TRAP(err, Ex_3_L(cnsx));
console->Printf(_L("err=%d\n"),err);
if(err<0)
{
console->Write(_L("错误:cnsx指针已经被取消!\n"));
}
}
}
return 0;
}
TInt Ex_1_L(TInt aNuma,TInt aNumb)
{
console->Printf(_L("Ex_1_L:a=%d,b=%d\n"),aNuma,aNumb);
//如果 aNuma 的值大于aNumb 的值则leave
if(aNuma>aNumb)
{
console->Printf(_L("%d>%d ,User Leave!\n"),aNuma,aNumb);
User::Leave(2);
}
return 0;
}
TInt Ex_2_L(TInt aNuma,TInt aNumb)
{
console->Printf(_L("Ex_2_L:a=%d,b=%d\n"),aNuma,aNumb);
TInt sub;
sub=aNumb-aNuma;
if(sub<0)
{
console->Printf(_L("%d-%d=%d,%d<0,User Leave!\n"),aNumb,aNuma,sub,sub);
}
//当sub值小于 0 时 leave
User::LeaveIfError(sub);
return 0;
}
TInt Ex_3_L(CConsoleBase* cnx)
{
//当 cnx等于 NULL 时 leave
User::LeaveIfNull(cnx);
return 0;
}
至于如何制作成VC的项目并调试,请参考一下HELLOWORLD.MMP的做法,然后再用bldmake 此命令制作成VC6项目文件。
#include <e32cons.h>
#include <e32std.h>
// 定义本地数据
LOCAL_D CConsoleBase* console;
LOCAL_D TInt err;
//定义本地代码
LOCAL_C TInt Ex_1_L(TInt,TInt);
LOCAL_C TInt Ex_2_L(TInt,TInt);
LOCAL_C TInt Ex_3_L(CConsoleBase*);
//全局函数,被 E32 调用的主函数,
GLDEF_C TInt E32Main()
{
// 定义一个 Descriptor,作为Console的标头显示
_LIT(TITLE,"\nLeave 测试\n");
//存放一组二维值,分别表示长和宽
TSize Ts=TSize();
//设置这组值
Ts.SetSize(-1,-1);
//在 e32base.h 中定义了Console 类 ,NewL() 这个类的静态方法。
console=Console::NewL(TITLE,Ts);
TInt i=0;
TKeyCode key;
while(i<1000)
{
//断言处理:按 Esc 键 终止线程并退出
__ASSERT_ALWAYS(key!=27,User::Panic(_L("End Thread"),key));
key=console->Getch();
console->Printf(_L("step[%d]:%c \n"),i++,key);
// 按 T 键
if (key==116)
{
console->Write(_L("[T]请输入A和B的值:\na="));
//从键盘输入
TInt a=console->Getch();
//把输入码转为0-9的数字
a=a-48;
console->Printf(_L("%d"),a);
console->Write(_L("\nb="));
TInt b=console->Getch();
b=b-48;
console->Printf(_L("%d\n"),b);
//使用 Trap 宏设置 code point,
//函数在Trap Harness的保护下运行
TRAP(err,Ex_1_L(a,b));
//输出错误码
console->Printf(_L("err=%d\n"),err);
//错误处理
if(err==2)
{
console->Write(_L("错误:a不能大于b!\n"));
err=KErrNone;
}
}
// 按 C 键 清楚屏幕
if (key==99)
{
console->ClearScreen();
}
// 按 S 键
if (key==115)
{
console->Write(_L("[S]请输入A和B的值:\na="));
//从键盘输入
TInt a=console->Getch();
//把输入码转为0-9的数字
a=a-48;
console->Printf(_L("%d"),a);
console->Write(_L("\nb="));
TInt b=console->Getch();
b=b-48;
console->Printf(_L("%d\n"),b);
//使用 Trap 宏设置 code point,
//函数在Trap Harness的保护下运行
TRAP(err,Ex_2_L(a,b));
//输出错误码
console->Printf(_L("err=%d\n"),err);
//错误处理
if(err<0)
{
console->Write(_L("错误:值不可以小于零!\n"));
err=KErrNone;
}
else
{
console->Write(_L("没有Leave发生!\n"));
}
}
// 按 D 键
if (key==100)
{
CConsoleBase* cnsx=console;
cnsx->Write(_L("我是cnsx指针\n"));
console->Write(_L("是否要取消cnsx 指针?y/n \n"));
TInt ch=console->Getch();
if(ch==121 || ch==69)
{
cnsx=NULL;
}
else
{
cnsx->Write(_L("我还在那!\n"));
}
//设置Code Point
TRAP(err, Ex_3_L(cnsx));
console->Printf(_L("err=%d\n"),err);
if(err<0)
{
console->Write(_L("错误:cnsx指针已经被取消!\n"));
}
}
}
return 0;
}
TInt Ex_1_L(TInt aNuma,TInt aNumb)
{
console->Printf(_L("Ex_1_L:a=%d,b=%d\n"),aNuma,aNumb);
//如果 aNuma 的值大于aNumb 的值则leave
if(aNuma>aNumb)
{
console->Printf(_L("%d>%d ,User Leave!\n"),aNuma,aNumb);
User::Leave(2);
}
return 0;
}
TInt Ex_2_L(TInt aNuma,TInt aNumb)
{
console->Printf(_L("Ex_2_L:a=%d,b=%d\n"),aNuma,aNumb);
TInt sub;
sub=aNumb-aNuma;
if(sub<0)
{
console->Printf(_L("%d-%d=%d,%d<0,User Leave!\n"),aNumb,aNuma,sub,sub);
}
//当sub值小于 0 时 leave
User::LeaveIfError(sub);
return 0;
}
TInt Ex_3_L(CConsoleBase* cnx)
{
//当 cnx等于 NULL 时 leave
User::LeaveIfNull(cnx);
return 0;
}
至于如何制作成VC的项目并调试,请参考一下HELLOWORLD.MMP的做法,然后再用bldmake 此命令制作成VC6项目文件。