编译过程中出现Winhttp.h错误:未在此范围内声明'WinHttpOpen'

问题描述 投票:-1回答:1

我尝试找出原因,为什么gcc / g ++编译器会引发如下错误:

.\http.cpp: In function 'int main()':
.\http.cpp:14:5: error: 'WinHttpOpen' was not declared in this scope
     WinHttpOpen(  L"A WinHTTP Example Program/1.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);

下面我放我的代码。这很奇怪,因为我是根据MSDN文档中的代码编写的。

#include <stdio.h>
#include <winhttp.h>
#pragma comment(lib, "winhttp.lib");

using namespace std;

int main(void){
    bool bResults = false;
    // HINTERNET hSession = NULL;
    // HINTERNET hConnect = NULL;
    // HINTERNET hRequest = NULL;

    // Use WinHttpOpen to obtain a session handle.
    WinHttpOpen(  L"A WinHTTP Example Program/1.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);

    // Specify an HTTP server.
    // if (hSession)
    //     hConnect = WinHttpConnect( hSession, L"www.wp.pl",
    //                                INTERNET_DEFAULT_HTTP_PORT, 0);

    // // Create an HTTP Request handle.
    // if (hConnect)
    //     hRequest = WinHttpOpenRequest( hConnect, L"GET", 
    //                                    L"/writetst.txt", 
    //                                    NULL, WINHTTP_NO_REFERER, 
    //                                    WINHTTP_DEFAULT_ACCEPT_TYPES, 
    //                                    0);

    // Send a Request.
    // if (hRequest) 
    //     bResults = WinHttpSendRequest( hRequest, 
    //                                    WINHTTP_NO_ADDITIONAL_HEADERS,
    //                                    0, WINHTTP_NO_REQUEST_DATA, 0, 
    //                                    0, 0);

    // Place additional code here.


    // Report errors.
    // if (!bResults)
    //     printf("Error %d has occurred.\n",GetLastError());

    // // Close open handles.
    // if (hRequest) WinHttpCloseHandle(hRequest);
    // if (hConnect) WinHttpCloseHandle(hConnect);
    // if (hSession) WinHttpCloseHandle(hSession);
    return 0;
}

您有什么建议吗?我注释掉了部分代码,但这没关系,错误总是一样。

c++ c winapi gcc g++
1个回答
0
投票

#pragma comment用于Visual C ++编译器,gcc / g ++将忽略它。使用MinGW编译时,可以使用命令行而不是#pragma-lwinhttp

另外需要添加#include <windows.h>

这样的代码:

#include <stdio.h>
#include <windows.h>
#include <winhttp.h>

int main(void) {

    // Use WinHttpOpen to obtain a session handle.
    WinHttpOpen(L"A WinHTTP Example Program/1.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);

    return 0;
}

像这样编译命令:

g++ test.cpp -o test.exe -lwinhttp
© www.soinside.com 2019 - 2024. All rights reserved.