![]() |
bringt GetLastError nach raise Exception noch etwas?
Hallo ,
ich habe das eine ziemlich pauschale Execption welche die VCL intern raised wenn eine Windows Funktion fehlschlagt. Kann ich in meinem Programm im Except Teil SyserrorMessage(GetlastError) benutzen um den genauen Fehlergrund melden zu können? Der Try except block kapselt exakt nur diese eine VCL Methode die eben die Windows Funktion aufruft. Ich will eben vermeiden die VCL zu modifizieren. |
AW: bringt GetLastError nach raise Exception noch etwas?
Solange danach keine andere Windows-Funktion aufgerufen wurde, die ebenfalls einen Fehlerstatus setzt, geht das, ja.
|
AW: bringt GetLastError nach raise Exception noch etwas?
Also kein EurekaLog und Co. verwenden, denn die machen ganz viel.
Es kommt auch auf die Exception (Einige machen noch was im Constructor), dann noch auf die Try-Finally/Except und Prozedurebenen zwischen der Exception und dem Except. Wie z.B. Speicherfreigaben lokaler Vriablen. Aber: Da GetLastError nicht verwendet wird, wenn eine Exception geworfen wird, mußt du nur nach dem/den WinAPI-Aufruf(en), welche(r) GetLastError setzen könnten, dieses sofort abfragen und zwischenspeichern. |
AW: bringt GetLastError nach raise Exception noch etwas?
Ja ich habe da so einen Cashmechanismus für Stammdaten (wir haben sehr viele stammdaten), Bewegungsdaten werden natürlich live ermittelt...
Das ganze Erfolgt in einem Timer Ereignis.
Delphi-Quellcode:
UpdateTimer ist in Delphi 7 seltenst dämlich implementiert! Weil die Fehler meldung nur auf Systemen kleiner windows 2000 sinnstiftend ist. Diese Methode möchte ich aber nicht patchen!
Try
//Timer sperren MyTimer.Enabled := False; //der Ruft nur killtimer aus updatetimer auf. aber hier könnte evtl Getlast error auch schon einen Wert haben....:( ok RefreshDatasets; //Die Stammdaten neu cachen welche in der loggtabelle Änderungen aufweisen. MyTimer.Enabled := True; //<-- hier passiert der Fehler //bzw in der methode Extctrls.TTimer.UpdateTimer; except on E:Exception do begin e.message := 'Fehler 67: ' + e.Message+ #13#10' SysErrorMessage:'+SyserrorMessage(GetlastError); MyTimerActive := false; raise; end; end;
Delphi-Quellcode:
procedure TTimer.UpdateTimer;
begin KillTimer(FWindowHandle, 1); if (FInterval <> 0) and FEnabled and Assigned(FOnTimer) then if SetTimer(FWindowHandle, 1, FInterval, nil) = 0 then raise EOutOfResources.Create(SNoTimers); end; |
AW: bringt GetLastError nach raise Exception noch etwas?
Zitat:
Wird
Delphi-Quellcode:
etwa ausgelöst?
EOutOfResources.Create(SNoTimers);
|
AW: bringt GetLastError nach raise Exception noch etwas?
Ja genau der wird ausgelöst ("nicht genügend timer verfügbar")
Und die Fehlermeldung hat mit der Realität nichs zu tun...denn das eigentliche Problem dürfte sein das der Rechner kurz davor mehrfach eingefroren ist...und hinterher neugestartet werden musste.. Der Text ist nicht wirklich aussagekräftig auf Rechnern größer NT4.0 Deswegen will ich zusätzlich die SysErrorMessage haben! |
AW: bringt GetLastError nach raise Exception noch etwas?
Zitat:
|
AW: bringt GetLastError nach raise Exception noch etwas?
[OT]
Zitat:
[/OT] |
AW: bringt GetLastError nach raise Exception noch etwas?
Zitat:
Das Problem ist also eher ein konzeptionelles, sei es in diesem oder einem anderen Programm... |
AW: bringt GetLastError nach raise Exception noch etwas?
Zitat:
Und das ist wohl in diesem fall auch der fall (Vermutung) oder ich schreibe z.B. wie wild in dem Programm im Arbeitsspeicher herum und kotaminiere die Hwnd variable... &c... Auf jedenfall wäre es super sinnvoll die richtige Fehlermeldung zu bekommen, statt dieses Standardtextes |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz