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 が適切に割り当てられます。注: このケースは、1 つの 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;