c++ - 将 HINTERNET 连接移到程序外
问题描述
这是我的代码的缩短版本:
#include <iostream>
#include <urlmon.h>
#include <wininet.h>
#pragma comment(lib, "urlmon.lib")
#pragma comment(lib, "wininet.lib")
void data();
void test(std::string received) {
data();
Sleep(1);
}
void data() {
- >>HINTERNET connect = InternetOpen(L"MyBrowser", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
HINTERNET OpenAddress = InternetOpenUrl(connect, L"web page", NULL, 0, INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_KEEP_CONNECTION, 0);
char dataReceived[5000];
std::string received;
DWORD NumberOfBytesRead = 0;
while (InternetReadFile(OpenAddress, dataReceived, 5000, &NumberOfBytesRead) && NumberOfBytesRead)
{
received += std::string(dataReceived);
}
- >>InternetCloseHandle(connect);
InternetCloseHandle(OpenAddress);
test(received);
}
int main() {
data();
}
请告诉我如何正常地将选定的行(->>)移到函数之外以运行一次?
解决方案
更改data()
并test()
以一个HINTERNET
作为参数,然后main()
可以创建HINTERNET
传入,例如:
#include <iostream>
#include <urlmon.h>
#include <wininet.h>
#pragma comment(lib, "urlmon.lib")
#pragma comment(lib, "wininet.lib")
void data(HINTERNET connect);
void test(HINTERNET connect, std::string received) {
data(connect);
Sleep(1);
}
void data(HINTERNET connect) {
HINTERNET OpenAddress = InternetOpenUrl(connect, L"web page", NULL, 0, INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_KEEP_CONNECTION, 0);
char dataReceived[5000];
std::string received;
DWORD NumberOfBytesRead = 0;
while (InternetReadFile(OpenAddress, dataReceived, 5000, &NumberOfBytesRead) && NumberOfBytesRead)
{
received += std::string(dataReceived);
}
InternetCloseHandle(OpenAddress);
test(connect, received);
}
int main() {
HINTERNET connect = InternetOpen(L"MyBrowser", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
data(connect);
InternetCloseHandle(connect);
}
推荐阅读
- r - Problem with Analysing Turkish Text while using stopwords "tr" with R
- c# - 在 C# 中禁用 Excel 工作簿的自动保存?
- http - 如何从 json 请求创建一个复杂的类
- amazon-web-services - 在 AWS Lambda 中访问用户身份
- python - 在 matplotlib 中,使用 plot 和 hist 的返回绘制直方图
- python - 如何根据时间(以毫秒为单位)对 JSON 列表进行排序?
- symfony - 带有过滤器列表的 symfony easyadmin 表单字段类型实体
- css - 设置元素之间的空间 - 边距顶部/底部
- c# - 将浮点数保存到文本文件无法正常工作
- reactjs - 如何在 Draftjs 编辑器中修改样式?