Jakiś unikalny kod błędu

0

Cześć, mam taką sytuację:

try
  //jakiś kod, jedna z linijek może czasem powodować błąd
except
 on e: exception do
  begin
    //kod inny
  end;
end;

I teraz jest taka kwestia, że muszę rozpoznać dokładny typ wyrzucanego błędu podczas konkretnej informacji(a nie, ze jest typu exception).

Gdy sprawdzam sobie

showMessage(e.className);

to wtedy wyskakuje, że jest to EOleException. Ale to też zbyt ogólne. Więc czy mogę jakoś dostać unikalny kod błędu?
(tzn., czy różne błędy typu EOleException, dają jakieś różne kody)

0

Akurat EOleException ma własność ErrorCode. Sprawdź też inne klasy wyjątków, może coś znajdziesz.

0

dokładny typ? czy komunikat o błędzie?
Do zawartości możesz dobrać się poprzez Message, przykładowo:

except
on E: Exception do blad('Raporty','Tworzenie pliku',E.Message);
end;

0
Morris napisał(a)

Akurat EOleException ma własność ErrorCode. Sprawdź też inne klasy wyjątków, może coś znajdziesz.

OK, ale w helpie pisze, że errorCode jest inicjalizowany w konstruktorze. Teraz problem jest taki, że jak stworzyć ten wyjątek(nie mogę się posłużyć raise), muszę to zrobić już w obsłudze w except...

Jak to robię tak:

except
 on e: EOleException do
  begin
    showMessage(intToStr(e.errorCode));
    //...
  end;
end;

to dostaję jakąś ogromną liczbę ujemną :|

0
Juhas napisał(a)
except
 on e: EOleException do
  begin
    showMessage(intToStr(e.errorCode));
    //...
  end;
end;

to dostaję jakąś ogromną liczbę ujemną :|

To zamiast IntToStr użyj Format('%.8X', [e.ErrorCode]) - lepiej się szuka numerów błędów OLE w heksie. Numery błędów OLE mają zapalony najstarszy bit ($80000000) i stąd ta liczba ujemna.
Sprawdź sobie jak są "skonstruowane" numery błędów - w pliku Windows.pas poszukaj "Error code definitions for the Win32 API functions".

1 użytkowników online, w tym zalogowanych: 0, gości: 1