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

War es hilfreich?

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. 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top