J'utilise Delphi Pro 6 sous Windows XP avec FastMM 4.92 et JEDI JVCL 3.0. Étant donné le code ci-dessous, j'ai le problème suivant: seul le premier bloc de gestion d'exception obtient une instance valide de E. Les autres blocs correspondent correctement à la classe de l'exception étant levée, mais E est non affecté. Par exemple, étant donné l'ordre actuel des blocs de gestion des exceptions lorsque je lève un E1, le bloc pour E1 correspond et E est une instance d'objet valide. Cependant, si j'essaie d'élever un E2, ce bloc correspond, mais E n'est pas affecté (nul). Si je déplace le bloc d'accrochage E2 en haut de la commande et soulève un E1, alors quand le bloc E1 correspond à E, il est maintenant non affecté. Avec cette nouvelle commande si j'élève un E2, E est correctement affecté alors que ce n'était pas le cas lorsque le bloc E2 n'était pas le premier bloc de la commande. Note J'ai essayé ce cas avec un projet de bare-bones composé d'un seul formulaire Delphi. Est-ce que je fais quelque chose de vraiment stupide ici ou est-ce que quelque chose ne va vraiment pas?Delphi Problème de gestion des exceptions avec plusieurs blocs de gestion des exceptions
Merci, Robert
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;
Je suis incapable d'observer toute anomalie dans Delphi 2009 en utilisant ce code. –
Je pense que ce problème ne se produit que parce que vous n'utilisez pas réellement E dans le bloc. En raison des optimisations du compilateur, cette variable ne sera pas stable lorsqu'elle n'est pas utilisée. Si vous voulez mais dans quelque chose comme OutputDebugString ('E1' + E.Message) cela devrait fonctionner. –