AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi bringt GetLastError nach raise Exception noch etwas?
Thema durchsuchen
Ansicht
Themen-Optionen

bringt GetLastError nach raise Exception noch etwas?

Ein Thema von QuickAndDirty · begonnen am 16. Aug 2011 · letzter Beitrag vom 17. Aug 2011
Antwort Antwort
Seite 1 von 2  1 2      
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.888 Beiträge
 
Delphi 12 Athens
 
#1

bringt GetLastError nach raise Exception noch etwas?

  Alt 16. Aug 2011, 17:14
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.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.359 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: bringt GetLastError nach raise Exception noch etwas?

  Alt 16. Aug 2011, 17:34
Solange danach keine andere Windows-Funktion aufgerufen wurde, die ebenfalls einen Fehlerstatus setzt, geht das, ja.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.171 Beiträge
 
Delphi 12 Athens
 
#3

AW: bringt GetLastError nach raise Exception noch etwas?

  Alt 16. Aug 2011, 18:22
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.888 Beiträge
 
Delphi 12 Athens
 
#4

AW: bringt GetLastError nach raise Exception noch etwas?

  Alt 17. Aug 2011, 09:39
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:
    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;
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!
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;
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (17. Aug 2011 um 09:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.171 Beiträge
 
Delphi 12 Athens
 
#5

AW: bringt GetLastError nach raise Exception noch etwas?

  Alt 17. Aug 2011, 12:43
<-- hier passiert der Fehler
Welcher Fehler?
Wird EOutOfResources.Create(SNoTimers); etwa ausgelöst?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.888 Beiträge
 
Delphi 12 Athens
 
#6

AW: bringt GetLastError nach raise Exception noch etwas?

  Alt 17. Aug 2011, 13:53
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!
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (17. Aug 2011 um 13:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: bringt GetLastError nach raise Exception noch etwas?

  Alt 17. Aug 2011, 13:55
Der text ist also nicht wirklich aussage kräftig auf Rechnern größer NT4.0
[OT] Wenn man auch so modernes Zeugs einsetzt... (SCNR) [/OT]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.888 Beiträge
 
Delphi 12 Athens
 
#8

AW: bringt GetLastError nach raise Exception noch etwas?

  Alt 17. Aug 2011, 14:13
[OT]
Der text ist also nicht wirklich aussage kräftig auf Rechnern größer NT4.0
[OT] Wenn man auch so modernes Zeugs einsetzt... (SCNR) [/OT]
Wenn man Timer auf Formularen spammen will, kommt man da nicht drum herum.
[/OT]
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.359 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: bringt GetLastError nach raise Exception noch etwas?

  Alt 17. Aug 2011, 14:50
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..
Doch, das ist genau das Problem. Irgendein Programm schnappt sich da zu viele Handles, und Windows 2000 hat halt nicht so viele zur Verfügung.

Das Problem ist also eher ein konzeptionelles, sei es in diesem oder einem anderen Programm...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.888 Beiträge
 
Delphi 12 Athens
 
#10

AW: bringt GetLastError nach raise Exception noch etwas?

  Alt 17. Aug 2011, 15:08
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..
Doch, das ist genau das Problem. Irgendein Programm schnappt sich da zu viele Handles, und Windows 2000 hat halt nicht so viele zur Verfügung.

Das Problem ist also eher ein konzeptionelles, sei es in diesem oder einem anderen Programm...
Ja aber es hat mit der Timer-Beschränkung in den älteren Windows Versionen nichts zu tun. Deswegen ist die Fehlermeldung falsch! Und entweder bekomme ich dort gerade einfach kein Handle...was ja dann eine Problem aller Anwendnungen dieses PCs ist...bzw. einer Anwendung dieses Pcs die handles leckt.
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
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz