我在我的程序的其他两个地方打电话给InternetOpenUrl,它完美无瑕。但是我最后一次调用它时失败并出现错误87(参数不正确)。这很奇怪,因为除了url之外,参数完全相同。 这是我的代码:
wchar_t url[] = {'h','t','t','p','s',':','/','/','w','w','w','.','e','x','a','m','p','l','e','.','c','o','m', 0};
HINTERNET hFile = NULL;
hOpen = InternetOpenW(L"MyAgent", NULL, NULL, NULL, NULL);
if (!hOpen)
ret = EXIT_FAILURE;
DWORD dwRequestFlags =
INTERNET_FLAG_NO_UI
| INTERNET_FLAG_NO_AUTH
| INTERNET_FLAG_PRAGMA_NOCACHE
| INTERNET_FLAG_NO_CACHE_WRITE;
hFile = InternetOpenUrlW(hOpen, url, NULL, NULL, dwRequestFlags, NULL);
然后我使用GetLastError()找出它是87。
答案 0 :(得分:1)
即使InternetOpenUrl()
失败,您也在呼叫InternetOpen()
,因此hOpen
无效。做这样的事情:
hOpen = InternetOpenW(L"MyAgent", NULL, NULL, NULL, NULL);
if (!hOpen)
ret = EXIT_FAILURE;
else
{
DWORD dwRequestFlags =
INTERNET_FLAG_NO_UI
| INTERNET_FLAG_NO_AUTH
| INTERNET_FLAG_PRAGMA_NOCACHE
| INTERNET_FLAG_NO_CACHE_WRITE;
hFile = InternetOpenUrlW(hOpen, url, NULL, NULL, dwRequestFlags, NULL);
if (!hFile)
ret = EXIT_FAILURE;
else
// and so on...
}
或者:
ret = 0;
hOpen = InternetOpenW(L"MyAgent", NULL, NULL, NULL, NULL);
if (!hOpen)
ret = EXIT_FAILURE;
if (ret == 0)
{
DWORD dwRequestFlags =
INTERNET_FLAG_NO_UI
| INTERNET_FLAG_NO_AUTH
| INTERNET_FLAG_PRAGMA_NOCACHE
| INTERNET_FLAG_NO_CACHE_WRITE;
hFile = InternetOpenUrlW(hOpen, url, NULL, NULL, dwRequestFlags, NULL);
if (!hFile)
ret = EXIT_FAILURE;
}
if (ret == 0)
{
// and so on...
}
此外,这一行:
wchar_t url[] = {'h','t','t','p','s',':','/','/','w','w','w','.','e','x','a','m','p','l','e','.','c','o','m', 0};
可以这样重写:
wchar_t url[] = L"https://www.example.com";
甚至这个(因为没有必要制作文字数据的本地副本):
const wchar_t *url = L"https://www.example.com";