Любые предположения относительно того, почему этот простой тестовый код показывает сбой WinHttpConnect с кодом ошибки 6 (неверный дескриптор или ERROR_INVALID_HANDLE):
HINTERNET internet = WinHttpOpen(L"test",WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,WINHTTP_NO_PROXY_NAME,WINHTTP_NO_PROXY_BYPASS,0);
assert(internet == (HINTERNET)1);
HINTERNET connect = WinHttpConnect(internet,L"www.microsoft.com",INTERNET_DEFAULT_HTTP_PORT,0);
assert(!connect);
DWORD err = GetLastError();
assert(err == 6);
Все вышеперечисленные утверждения проходят. Я запускал этот код на своем ПК с Win8, а также на сервере Win2003. Два разных ПК, одна и та же проблема. Мой первоначальный код был более сложным и работал как сервис, но я сократил его до этого кода и просто запустил в простом тестовом приложении в пользовательском режиме (не в сервисе).
Мое приложение скомпилировано с помощью более старого компилятора Borland Builder 6, но не уверен, что это должно быть проблемой.
WinHttpOpen()
не гарантирует возврат 1 в случае успеха. Вместо этого вы должны утверждать!= 0
, как вы делаете сWinHttpConnect()
. Кроме того,GetLastError()
имеет смысл только тогда, когда любая из функций возвращает 0, поэтому не вызывайте его, если они на самом деле не терпят неудачу. - person Remy Lebeau   schedule 13.08.2014