Utilizzo Delphi Pro 6 su Windows XP con FastMM 4.92 e JEDI JVCL 3.0. Dato il codice qui sotto, sto avendo il seguente problema: solo il primo blocco di gestione delle eccezioni ottiene un'istanza valida di E. Gli altri blocchi corrispondono correttamente con la classe dell'eccezione che viene sollevata, ma E non è assegnata (nil).Delphi Problema di gestione delle eccezioni con più blocchi di gestione delle eccezioni
Ad esempio, dato l'ordine corrente dei blocchi di gestione delle eccezioni quando sollevo un E1 il blocco per le corrispondenze E1 e E è un'istanza oggetto valida. Tuttavia, se provo a generare un E2, quel blocco corrisponde, ma E non è assegnato (nulla). Se sposto il blocco di cattura E2 in cima all'ordinamento e alzi un E1, quando il blocco E1 corrisponde a E è ora non assegnato. Con questo nuovo ordinamento se sollevo un E2, E viene assegnato correttamente quando non lo era quando il blocco E2 non era il primo blocco nell'ordinamento. Nota Ho provato questo caso con un progetto bare-bones composto da un solo modulo Delphi.
Sto facendo qualcosa di veramente stupido qui o c'è qualcosa di veramente sbagliato?
Grazie, 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;
non sono in grado di osservare ogni anomalia in Delphi 2009 utilizzando questo codice –
Penso che questo problema si verifica solo perché in realtà non si utilizza E all'interno del blocco. A causa delle ottimizzazioni del compilatore, questa variabile non sarà stabile quando non è in uso. Se dovessi farlo in qualcosa come OutputDebugString ('E1' + E.Message) dovrebbe funzionare. –