【发布时间】:2019-07-14 12:14:54
【问题描述】:
当出现 EZeroDivide、EOverflow、EMathError... 等异常时,它们会显示默认消息。
例如,以下代码引发 EZeroDivide 并带有以下消息:
浮点除以零
procedure TForm1.Button1Click(Sender: TObject);
var
N : Extended;
D : Extended;
begin
N := 100;
D := 0;
Caption := FloatToStr(N/D);
end;
当我通过代码“手动”引发EZeroDivide 异常时,我必须将Msg 参数传递给构造函数,并将其作为EZeroDivide 异常引发,其中包含空字符串消息:
procedure TForm1.Button2Click(Sender: TObject);
begin
raise EZeroDivide.Create('');
end;
默认异常消息从何而来?
【问题讨论】:
-
消息在 System.SysConst.pas 中定义为资源字符串 SZeroDivide,它是 RTL 源的一部分。
-
显示的消息在 SysConst.pas 中定义为
SZeroDivide,RTL 在引发该异常时使用它。 -
虽然这个问题很容易回答,但我们想知道您为什么关心这个问题?只是好奇,还是有什么目的?通常,您永远不需要创建和提升自己的
EZeroDivide。你为什么要这样做? -
@Fabrizio 如果好奇,this question 是松散相关的。
标签: delphi exception delphi-2007