一个异常问题,在线等待。

8water 2003-04-14 10:38:35
如何在IDE环境中,扑捉异常。不要告诉我脱离IDE环境。我的意思是说在编译器弹出异常来之前,被我的异常处理扑捉(在IDE中),如何解决。比如如下代码;
adoqry->Append();
try
{
// adoqry->FieldByName("cj2")->AsVariant.Clear();
adoqry->FieldByName("cj1")->AsString = Edit1->Text; //cj1字段不能为空;故要发生EConvertError异常,可是为什么我的EConvertError抓不到呢?会先被编译器的异常先抓到?
adoqry->FieldByName("cj2")->AsInteger = StrToInt( Edit2->Text );
}
catch(EConvertError& e)
{
ShowMessage("kkk");
}
catch(Exception & e)
{
ShowMessage("jjj");
// ShowMessage( e.Message.c_str() );
}
...全文
108 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
adventurezl 2003-04-15
  • 打赏
  • 举报
回复
你这样做有必要么?反正应用程序运行时,你会捕捉到异常的
xc2927 2003-04-15
  • 打赏
  • 举报
回复
找书看吗,

这么简单。

HUANG_JH 2003-04-15
  • 打赏
  • 举报
回复
我想,目前我还是不能够说清楚C++的异常和运行期异常的区别,我明白C++的异常和运行期异常是怎么一回事,但是不知道如何表述 :-(
8water 2003-04-15
  • 打赏
  • 举报
回复
HUANG_JH(在体验广州的深度与湿度的OOP青年 兄弟,你还是没有说清楚 C++的异常和运行期异常的区别嘛 :) 另外,加__保留给编译器用 又怎么回事?
ThinkX 2003-04-15
  • 打赏
  • 举报
回复
IDE只不过告诉你有个异常出现了,处理异常是你自己的事。IDE的那个异常对话框不会为你处理异常的,再说,你的程序不会总在IDE中运行吧,所以你必须自己处理异常。
HUANG_JH 2003-04-15
  • 打赏
  • 举报
回复
xcpt.h定义了一个特别的宏--“try”--已经成为C++真正的关键字的东西。这意味着你不能在包含了excpt.h的编译单元中简单地混合SEH和标准C++的异常块,除非你愿意#undef这个try宏。当这样undef而露出真正的try关键字时,要冒搞乱SEH的维护人员大脑的危险。另一方面,精通标准C++的程序员会将try理解为一个关键字而不是宏。
我认为,包含一个头文件(即使是象excpt.h这样的非标头文件)不应该改变符合语言标准的代码的行为。我更坚持掩盖或重定义掉语言标准定义的关键字是个坏习惯。我建议:#undef try,同样不使用其它的伪关键字宏,直接使用真正的关键字(如__try)。
HUANG_JH 2003-04-15
  • 打赏
  • 举报
回复
C++标准(条款17.4.3.1.2,“Global names”)规定:
下列名字和函数总是保留给编译器:
所有带双下划线(__)或以一个下划线加一个大写字母开始的名字保留给编译器随意使用。
所有以一个下划线开始的名字保留给编译器作全局名称用。
8water 2003-04-15
  • 打赏
  • 举报
回复
能否解释一下:C++的异常和运行期异常的区别?
8water 2003-04-15
  • 打赏
  • 举报
回复
to :HUANG_JH(在体验广州的深度与湿度的OOP青年
EXCEPTION_EXECUTE_HANDLER 是什么意思?
另外,try 与__try有什么区别?麻烦解释一下,非常感谢。
HUANG_JH 2003-04-15
  • 打赏
  • 举报
回复
你没有分清C++的异常和运行期异常的区别,
用__try...__except解决,
如下:

__try
{
float a=1,b=0;
float c=a/b;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
ShowMessage("divide by zero");
}
8water 2003-04-15
  • 打赏
  • 举报
回复
to ThinkX(思考中·求职中) ( ) 兄弟:
那我看到不少网上的朋友往往写上着段代码:

catch(Exception & e)
{
ShowMessage( e.Message.c_str() );
}

程序需要中止当前处理,Application已经做好了,为什么还要去捉它了。
这段代码写跟不写有什么两样?
请ThinkX(思考中·求职中) ( ) 等兄弟解释一下。先谢了。
ThinkX 2003-04-15
  • 打赏
  • 举报
回复
在IDE那个异常对话框出现后,接着点击Run,就继续运行了。你的异常代码也可以执行了。
你的这个问题真是多余
8water 2003-04-15
  • 打赏
  • 举报
回复
那如果应用程序运行时,它会扑捉到异常。那为什么还要我门设计异常??我这个问题真是搞不懂。
8water 2003-04-15
  • 打赏
  • 举报
回复
“你这样做有必要么?反正应用程序运行时,你会捕捉到异常的.”
我觉得有必要呀,应用程序运行时,捕捉到异常的是VCL本身做好的异常,而非我扑捉到的。请指点。
ThinkX 2003-04-14
  • 打赏
  • 举报
回复
编译器设置了一个debug hook,会捕捉到异常的,你去看看rtl的源代码或者VCL的System.pas会看到一些细节。

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧