首页 > 解决方案 > 将 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();
}

请告诉我如何正常地将选定的行(->>)移到函数之外以运行一次?

标签: c++

解决方案


更改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);
}

推荐阅读