【发布时间】:2014-08-12 21:02:10
【问题描述】:
关于为什么这个简单的测试代码会显示 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 PC 和 Win2003 服务器上运行了这段代码。两台不同的电脑,同样的问题。我的原始代码更复杂,并且作为服务运行,但我简化为这段代码,只是在一个简单的测试应用程序中以用户模式(而非服务)运行它。
我的应用是使用较旧的编译器 Borland Builder 6 编译的,但不确定这是否是个问题。
【问题讨论】:
-
WinHttpOpen()不保证在成功时返回 1。你应该在!= 0上声明,就像你对WinHttpConnect()所做的那样。此外,GetLastError()仅在任一函数返回 0 时才有意义,因此如果它们实际上没有失败,请不要调用它。 -
是的,但我希望问题尽可能详细,以表明在我的情况下它总是返回 1。看起来有点奇怪,也许是问题的线索,因为大多数句柄都是较大的值。
标签: c++builder winhttp