2009-02-25 104 views
2

试图用SDK编译一个示例http类,并得到一些奇怪的链接错误...我相信它与丢失的选项或目录有关...WinHttp/Windows SDK的C++编译问题

我不是C++的专家,你可以看到,但寻找任何帮助。

我包括我的示例类。我也安装了Windows SDK。如果您需要关于我的设置或任何其他信息,请询问。我宁愿有人指向我的WinHttp SDK示例项目。

//START OF utils.cpp 
#pragma once 
#include "stdafx.h" 

class http 
{ 
public: 
    http(); 
    ~http(); 

    std::string getText(); 

}; 
//END OF utils.cpp 

//START OF utils.cpp 
#include "stdafx.h" 
#include "utils.h" 

http::http() 
{ 
} 

http::~http() 
{ 
} 

std::string http::getText() 
{ 
    DWORD dwSize = 0; 
    DWORD dwDownloaded = 0; 
    LPSTR pszOutBuffer; 
    BOOL bResults = FALSE; 
    HINTERNET hSession = NULL, 
     hConnect = NULL, 
     hRequest = NULL; 

    // Use WinHttpOpen to obtain a session handle. 
    hSession = WinHttpOpen(L"WinHTTP Example/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.microsoft.com", 
     INTERNET_DEFAULT_HTTPS_PORT, 0); 

    // Create an HTTP request handle. 
    if(hConnect) 
     hRequest = WinHttpOpenRequest(hConnect, L"GET", NULL, 
     NULL, WINHTTP_NO_REFERER, 
     WINHTTP_DEFAULT_ACCEPT_TYPES, 
     WINHTTP_FLAG_SECURE); 

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


    // End the request. 
    if(bResults) 
     bResults = WinHttpReceiveResponse(hRequest, NULL); 

    // Keep checking for data until there is nothing left. 
    if(bResults) 
    { 
     do 
     { 
      // Check for available data. 
      dwSize = 0; 
      if(!WinHttpQueryDataAvailable(hRequest, &dwSize)) 
       printf("Error %u in WinHttpQueryDataAvailable.\n", 
       GetLastError()); 

      // Allocate space for the buffer. 
      pszOutBuffer = new char[dwSize+1]; 
      if(!pszOutBuffer) 
      { 
       printf("Out of memory\n"); 
       dwSize=0; 
      } 
      else 
      { 
       // Read the data. 
       ZeroMemory(pszOutBuffer, dwSize+1); 

       if(!WinHttpReadData(hRequest, (LPVOID)pszOutBuffer, 
        dwSize, &dwDownloaded)) 
        printf("Error %u in WinHttpReadData.\n", GetLastError()); 
       else 
        printf("%s", pszOutBuffer); 

       // Free the memory allocated to the buffer. 
       delete [] pszOutBuffer; 
      } 
     } while(dwSize > 0); 
    } 


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

    // Close any open handles. 
    if(hRequest) WinHttpCloseHandle(hRequest); 
    if(hConnect) WinHttpCloseHandle(hConnect); 
    if(hSession) WinHttpCloseHandle(hSession); 

    return ""; 
} 
//END OF utils.cpp 

1>------ Build started: Project: winagent, Configuration: Debug Win32 ------ 
1>Compiling... 
1>utils.cpp 
1>Linking... 
1> Creating library C:\winagent\Debug\winagent.lib and object C:\winagent\Debug\winagent.exp 
1>utils.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall http::getText(void)" ([email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@XZ) 
1>utils.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall http::getText(void)" ([email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@XZ) 
1>utils.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall http::getText(void)" ([email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@XZ) 
1>utils.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall http::getText(void)" ([email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@XZ) 
1>utils.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall http::getText(void)" ([email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@XZ) 
1>utils.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall http::getText(void)" ([email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@XZ) 
1>utils.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall http::getText(void)" ([email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@XZ) 
1>utils.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall http::getText(void)" ([email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@XZ) 
1>C:\winagent\Debug\winagent.exe : fatal error LNK1120: 8 unresolved externals 
1>Build log was saved at "file://c:\winagent\Debug\BuildLog.htm" 
1>winagent - 9 error(s), 0 warning(s) 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

回答

9

如果您检查WinHttp *函数的MSDN参考,您将看到您需要链接库Winhttp.lib。

打开项目设置,选择链接器选项,然后'输入'并将WinHttp.lib添加到'其他依赖项'列表中。

或者你可以把

#pragma comment(lib, "winhttp.lib") 

(如前所述)在你的源代码。

4

您需要链接到winhttp.lib

更改项目设置或该行添加到您的.cpp文件

#pragma comment(lib, "winhttp") 
+0

当。你很快。 – 2009-02-25 23:39:51

1

确保您链接到Winhttp.lib

1

您尚未将WinHttp库添加到您的链接列表中。