我在带有 FastMM 4.92 和 JEDI JVCL 3.0 的 Windows XP 上使用 Delphi Pro 6。鉴于下面的代码,我遇到了以下问题:只有第一个异常处理块获得了 E 的有效实例。其他块与引发的异常的类正确匹配,但 E 未分配(nil)。
例如,当我引发 E1 时,给定异常处理块的当前顺序,E1 的块匹配并且 E 是一个有效的对象实例。但是,如果我尝试提高 E2,则该块确实匹配,但 E 未分配(nil)。如果我将 E2 捕获块移动到排序的顶部并引发 E1,那么当 E1 块匹配时,E 现在是未分配的。如果我提出一个 E2,使用这个新的排序,当 E2 块不是排序中的第一个块时,E 被正确分配。注意我用一个只包含一个 Delphi 表单的简单项目尝试了这个案例。
我在这里做的事情真的很愚蠢还是真的错了?
谢谢,罗伯特
type
E1 = class(EAbort)
end;
E2 = class(EAbort)
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
try
raise E1.Create('hello');
except
On E: E1 do
begin
OutputDebugString('E1');
end;
On E: E2 do
begin
OutputDebugString('E2');
end;
On E: Exception do
begin
OutputDebugString('E(all)');
end;
end; // try()
end;