我尝试找出原因,为什么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;
}
您有什么建议吗?我注释掉了部分代码,但这没关系,错误总是一样。
#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