2009-02-25 15 views
2

SDKでサンプルのhttpクラスをコンパイルしようとしていて、いくつかの奇妙なリンクエラーが発生しました...私は、欠けているオプションやディレクトリと何かをすると確信しています...C++ WinHttp/Windows SDKでコンパイルの問題

私はあなたが見ることができるように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 
あなたは

変更プロジェクト設定をwinhttp.libたり、.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

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

Dang。あなたは速い。 –

1

Winhttp.libにリンクしていることを確認してください。

1

リンクリストにWinHttpライブラリを追加していません。