Problem GetLastError API auf Windows 7
-
21-09-2019 - |
Frage
Ich habe eine Anwendung, die in Wechselwirkung mit dem Server. Wenn der Server ist dann dann werde ich bekommen ERROR_WINHTTP_CANNOT_CONNECT
ich getLastError()
API bin mit diesem Fehlercode zu bekommen, ich bin Umgang mit diesem Fehlercode richtige Fehlermeldungen an den Benutzer angezeigt werden soll. Dieses Programm funktioniert unter Windows 2003 Wenn ich mit Windows7 versuchte ich immer bin keinen Fehler, gibt getLastError()
API 0 jedes Mal, auch wenn Fehler aufgetreten sind. Ich bin mit C ++ als Programmiersprache betreffen.
Vielen Dank im Voraus
Santhu
Lösung 2
Ich habe ein anderes Verhalten von GetLastError API in Windows 2003 beobachtet und in Windows 7. Im Folgenden meiner Beobachtung Details sind
In Windows 2003:
Beispielcode:
WinHttpOpen ()
- erfolgreich abgeschlossen
Winhttpconnect()
- Diese API aus irgendwelchen Gründen nicht bestanden, so sagen wir Fehlercode 12029
GetLastErrorCode()
- Gibt den Fehlercode 12029 als erwartet
WinHttpCloseHandle(hOpen)
; - Schlussgriff für HttpOpen, schließt successfilly
GetLastErrorCode()
- Gibt den Fehlercode 12029
In Windows 7
Beispielcode:
WinHttpOpen ()
- erfolgreich abgeschlossen
Winhttpconnect()
- Diese API aus irgendwelchen Gründen nicht bestanden, so sagen wir Fehlercode 12029
GetLastErrorCode()
- Gibt den Fehlercode 12029 als erwartet
WinHttpCloseHandle(hOpen);
- Schlussgriff für HttpOpen, erfolgreich abgeschlossen
GetLastErrorCode()
- Gibt den Fehlercode 0 // sehen Sie den Unterschied mit Windows 2003 beispielsweise auf Windows 2003 diese API gibt letzten Fehler, die 1209
Andere Tipps
Wenn Sie Windows-API-Aufrufe zwischen dem Ausfall machen und die Zeit, die Sie GetLastError () aufrufen, kann der Fehlercode auf 0 zurückgesetzt, erhalten, wenn die API-Aufruf erfolgreich ist.
Sie müssen GetLastError () unmittelbar nach dem Scheitern nennen, und diesen Wert zu speichern, anstatt zu versuchen später GetLastError () zu warten und ruft.
Antwort von Microsoft auf diesem Verhalten
The rules for GetLastError are:
• If the WinHttp API returns error (for example WinHttpIsHostInProxyBypassList, http://msdn.microsoft.com/en-us/library/ee861268(VS.85).aspx) this is the error and GetLastError should *NOT* be called.
o If GetLastError() is called, regardless of the success or failure of the API, the returned value is unpredictable and may change between Windows versions, Service Packs, or even between runs.
• If the WinHttp API returns BOOL (for example WinHttpSetTimeouts, http://msdn.microsoft.com/en-us/library/aa384116(VS.85).aspx), it indicates failure by returning FALSE. If the caller is interested in the detailed error, (s)he should call GetLastError(). Note that GetLastError should be called *if and only if* the API failed.
o If GetLastError() is called when the API succeded (returned anything but FALSE), the returned value is unpredictable and may change between Windows versions, Service Packs, or even between runs.
• If the WinHttp API returns HINTERNET (pseudo handle) the rules are exactly the same, except failure is indicated by returning NULL.
o If GetLastError() is called when the API succeded (returned anything but NULL), the returned value is unpredictable and may change between Windows versions, Service Packs, or even between runs.