Estoy usando Delphi Pro 6 en Windows XP con FastMM 4.92 y JEDI JVCL 3.0. Dado el siguiente código, tengo el siguiente problema: solo el primer bloque de manejo de excepciones obtiene una instancia válida de E. Los otros bloques coinciden adecuadamente con la clase de la excepción que se está generando, pero E no está asignada (nil).Delphi Problema de manejo de excepciones con múltiples bloques de manejo de excepciones
Por ejemplo, dado el orden actual de los bloques de manejo de excepciones cuando elevo un E1, el bloque para E1 coincide y E es una instancia de objeto válida. Sin embargo, si trato de subir un E2, ese bloque no coincide, pero E no está asignado (nada). Si muevo el bloque de captura E2 a la parte superior de la ordenación y levanto un E1, entonces cuando el bloque E1 coincide con E está ahora sin asignar. Con este nuevo orden si elevo un E2, E se asigna correctamente cuando no era cuando el bloque E2 no era el primer bloque en el orden. Tenga en cuenta que probé este caso con un proyecto escueto que consiste en una sola forma Delphi.
¿Estoy haciendo algo realmente tonto aquí o es algo realmente malo?
Gracias, 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;
Soy incapaz de observar cualquier anomalía en Delphi 2009 usando este código –
Creo que este problema solo ocurre porque en realidad no usa E dentro del bloque. Debido a las optimizaciones del compilador, esta variable no será estable cuando no esté en uso. Si lo hiciera pero en algo como OutputDebugString ('E1' + E.Message) debería funcionar. –