Hallo,
ich mache einen API-Aufruf, der u.U. fehlschlägt. Laut MSDN kann ich den letzten Fehler mit der API GetLastError abrufen. Als Ergebnis bekomme ich aber immer 0. Ich weiß, dass XProfan da irgendwie reinfunkt, aber wie kann ich den Fehler jetzt abrufen?
GetLastError per API
-
-
-
-
Bringt auch nichts. Und macht soweit ich weiß auch nichts anderes als die APIs SetLastError und GetLastError zu bedienen.
-
Das liegt eventuell an XProfan.
Rufst du GetLastError erst zu spät auf, ist der Wert bereits wieder durch andere APIs geändert. Du solltest den auf jeden Fall sofort auslesen, wenn du die API aufgerufen hast, für die du den Wert brauchst. Du solltest ihn auch auf 0 setzen, bevor du ihn abfragst, wenn du den Wert dringend brauchst. Ob das wirklich mit XProfan immer funktioniert, ist aber fraglich. -
Bringt auch nichts. Und macht soweit ich weiß auch nichts anderes als die APIs SetLastError und GetLastError zu bedienen.
Das ist das Problem! Die XProfan Funktion setzt die API-Funktion zurück, so das dort kein gültiger Wert kommen kann. Entweder die XProfan-Funktion deaktivieren, wenn das geht, oder eben nur die XProfan-Funktion auswerten.
-
Ja, das dachte ich mir. Ich rufe den Wert sofort danach ab, aber es bringt nichts.
-
Ich rufe den Wert sofort danach ab, aber es bringt nichts.
Kein Wunder, XProfan setzt den Wert doch innerhalb seiner Funktion. Deine wird also erst danach aufgerufen!
-
?
Ich nutze eine API (InternetOpen/InternetConnect) und will dann den Fehler ermitteln. Da sollte XProfan nichts setzen. -
Es weiß doch aber keiner, was Profan intern tut. Letztendlich wird auch ein Compilat immer noch interpretiert. Es ist ja kein nativer Code sondern es werden nur Schlüsselworte durch Token ersetzt. Parameter werden dabei erst zur Laufzeit übersetzt. Und nachdem ein Befehl durch ist, wird der Nächste interpretiert. Wer weiß schon, welche Windowsfunktionen dazu aufgerufen werden. Dazwischen funkt dann auch noch das interne Messagehandling.
Gruß Volkmar
-
Schon klar. Deswegen frage ich ja ob es da eine Möglichkeit gibt das sicher abzufangen. Vielleicht weiß Roland was. Oder kann was zaubern. Getlasterror ist unerlässlich um Fehler von APIs zu verwalten.
-
Die Funktion muss ja auch nicht unbedingt fehlschlagen, weil die API fehlschlägt.
Wie groß ist den Programm zur Zeit in etwa? Wie viele Zeilen (wenn man alles zusammennimmt)? -
Es geht um meine WinINet.inc. Ich möchte eine Fehleranfrage einbauen, zum Beispiel beim Verbinden zum Server.
-
Versuch doch das:
Weil kein Kontakt zum Server hergestellt werden konnte, muss ja nicht zwingend der API-LastError gefüllt werden.
-
@AHT: Danke. Du hast zwar auf die Windows CE-Version des Befehls gelinkt, aber er ist natürlich identisch. Es funktioniert, ich kann die Fehlercodes abgreifen und auswerten.
Das hilft in dem speziellen Fall mit der WinINet-Geschichte, löst aber leider das generelle Problem nicht.
-
In den meisten Fällen geht das auch mit XProfan mit GetLastError. Der LastErrorCode wird manchmal auch gar nicht auf einen Fehlerwert gesetzt - wenn zum Beispiel die API nicht fehlschlägt und korrekt aufgerufen werden konnte, aus anderen Gründen aber kein Kontakt zum Server zustande kommt, könnte das zum Beispiel so sein.
-
In den meisten Fällen geht das auch mit XProfan mit GetLastError. Der LastErrorCode wird manchmal auch gar nicht auf einen Fehlerwert gesetzt - wenn zum Beispiel die API nicht fehlschlägt und korrekt aufgerufen werden konnte, aus anderen Gründen aber kein Kontakt zum Server zustande kommt, könnte das zum Beispiel so sein.
Das ergibt Sinn.
Nochmal danke. Ich kann jetzt die nächste Version der WinINet.inc zusammenbasteln. Nutzt die überhaupt jemand?
-
Ich nicht. Ich mache viele Sachen jetzt mit PureBasic - da brauche ich die nicht. Sinn macht so etwas wohl schon, wenn man mit XProfan Programme schreibt.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!