我在Windows XP上使用Delphi Pro 6與FastMM 4.92和JEDI JVCL 3.0。鑑於下面的代碼,我遇到了以下問題:只有第一個異常處理塊獲得了E的有效實例。其他塊與正在引發的異常的類匹配正確,但E未分配(nil)。德爾福與多個異常處理塊的異常處理問題
例如,考慮到當我升高E1時E1異常處理塊的當前順序,E1匹配的塊和E是有效的對象實例。但是,如果我嘗試提高E2,則該塊確實匹配,但E未分配(零)。如果我將E2捕獲塊移動到訂購的頂部並提起E1,那麼當E1塊匹配時E is現在是未分配的。如果我提出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;
我無法使用,觀察2009年德爾福的任何異常這段代碼。 – 2010-03-31 22:26:52
我認爲這個問題只發生,因爲你實際上並沒有在塊內使用E.由於編譯器優化,此變量在不使用時不穩定。 如果你想,但在類似OutputDebugString('E1'+ E.Message)它應該工作。 – 2013-09-03 09:08:38