【发布时间】:2016-10-01 20:01:09
【问题描述】:
所以我试图从我使用 WinInet 函数的网站中读取文件,因此我能够成功执行所有 InternetConnect() 函数和内容,但是当我尝试执行 InternetReadFileExA() 时,我不断收到错误87 这意味着参数不正确,当然它不会告诉我哪个不正确,所以我不知道如何修复它,我认为它可能是我设置为 NULL 的函数中的第四个参数,因为像往常一样微软从来没有告诉您如何获取特定值,它只说“调用者提供的用于异步操作的上下文值”。它并没有告诉我应该使用什么值。谁能告诉我我有什么问题以及如何解决?这是我的代码
HANDLE fileToSend;
HINTERNET iNetOpenHandle = InternetOpen(L"FileTransfer", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, INTERNET_FLAG_ASYNC);
using namespace std;
int main()
{
HINTERNET connectHandle = InternetConnect(iNetOpenHandle, L"IMhidingTheIpHere", INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, INTERNET_NO_CALLBACK, NULL);
PCWSTR acceptTypes[2] = {L"text/html", NULL};
HINTERNET httpReq = HttpOpenRequest(connectHandle, NULL, L"Tutorials.html", NULL, L"http://www.dominihq.hoxty.com/Tutorials.html", acceptTypes, INTERNET_FLAG_RELOAD, NULL);
if (httpReq != NULL) {
cout << "Opened http request successfully" << endl;
}
else {
cout << "Could not open http request" << endl;
int errCode = GetLastError();
cout << "Error Code: " << errCode << endl;
}
INTERNET_BUFFERSA iNetBuffer;
bool readFileStatus = InternetReadFileExA(httpReq, &iNetBuffer, WININET_API_FLAG_ASYNC, NULL);
if (readFileStatus == true) {
cout << "ReadFile completed successfully!" << endl;
cout << "Data: " << iNetBuffer.lpvBuffer << endl;
}
else {
cout << "Could not read file" << endl;
int errCode = GetLastError();
cout << "Error Code: " << errCode << endl;
}
system("Pause");
return 0;
}
这是错误所在的部分
bool readFileStatus = InternetReadFileExA(httpReq, &iNetBuffer, WININET_API_FLAG_ASYNC, NULL);
【问题讨论】:
-
“调用者提供的用于异步操作的上下文值。”表示如果您注册了异步回调,则它是您选择传递给您自己的函数的值。
-
您实际上可能有错误的值。您应该在执行任何其他系统调用之前获得错误代码 first(当您使用
cout输出时会发生这种情况)。 -
你为什么叫“InternetReadFileExA”而不是“InternetReadFileEx”?