title: C++ 307 Errors when trying to include winhttp.h in visual studio 2010
body: <p>I have a big big problem. I'm trying to use WinHttp to download file with C++ and I'm using Visual Studio 2010 in order to do this thing. </p>
  
  <p>My problem is that the program is not compiling because are generated 307 errors, all refering to <code>winhttp.h</code>.  I mention that I have included that file. What could be the problem? Thanks!</p>
  
  <p>There are some: </p>
  
  <pre><code>------ Build started: Project: a, Configuration: Debug Win32 ------
  
    b. Cpp
  
    a. Cpp
  
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(50): error C2146: 
  Syntax error: missing ';' before identifier 'HINTERNET'
  
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(50): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(50): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(51): error C2143: syntax error: missing ';' before '*'
  
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(51): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(51): error C2378: 'HINTERNET': redefinition; symbol cannot be overloaded with a typedef
  
            c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(50): see declaration of 'HINTERNET'
  
  
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(51): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(53): error C2146: syntax error: missing ';' before identifier 'INTERNET_PORT'
  
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(53): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(53): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(54): error C2143: syntax error: missing ';' before '*'
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(54): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(54): error C2378: 'INTERNET_PORT': redefinition; symbol cannot be overloaded with a typedef
            c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(53): see declaration of 'INTERNET_PORT'
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(54): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(95): error C2146: syntax error: missing ';' before identifier 'dwResult'
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(95): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(95): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(96): error C2146: syntax error: missing ';' before identifier 'dwError'
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(96): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(96): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(107): error C2146: syntax error: missing ';' before identifier 'dwMajorVersion'
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(107): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(107): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(108): error C2146: syntax error: missing ';' before identifier 'dwMinorVersion'
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(108): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(108): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(144): error C2146: syntax error: missing ';' before identifier 'dwStructSize'
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(144): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(144): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  c: \program files (x86)\microsoft sdks\windows\v7.0a\include\winhttp. H(145): error C2146: syntax error: missing ';' before identifier 'lpszScheme'
  </code></pre>
  
  <hr>
  
  <p>Now I have another problem. This is my code:</p>
  
  <pre><code>#include &lt;windows.h&gt;
  #include &lt;winhttp.h&gt;
  #include &lt;stdio.h&gt;
  #include &lt;iostream&gt;
  using namespace std;
  #include &lt;string.h&gt;
  
  int main()
  {
      DWORD dwSize = 0;
      DWORD dwDownloaded = 0;
      LPBYTE pszOutBuffer;
      BOOL bResults = FALSE;
      HINTERNET hSession = NULL, hConnect = NULL, hRequest = NULL;
  
  // Use WinHttpOpen to obtain a session handle.
  hSession = WinHttpOpen( L"Internet Explorer example", 
      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.my-new-gadget.com",
      INTERNET_DEFAULT_HTTPS_PORT, 0 );
  
  // Create an HTTP request handle.
  if( hConnect )
      hRequest = WinHttpOpenRequest( hConnect, L"GET", L"index.php",
      NULL, WINHTTP_NO_REFERER, 
      NULL, NULL);
  
  // 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 );
  
  HANDLE hFile = CreateFile("D:\\index.php", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
  
  if (bResults)
  {
      do     
      {        
          // Check for available data.        
          dwSize = 0;        
          if (!WinHttpQueryDataAvailable( hRequest, &amp;dwSize))
              printf( "Error %u in WinHttpQueryDataAvailable.\n", GetLastError());        
          // Allocate space for the buffer.        
          pszOutBuffer = new byte[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, &amp;dwDownloaded))                
              {                
                  printf( "Error %u in WinHttpReadData.\n", GetLastError());                
              }            
              else                
              {                        
                  //printf("%s", pszOutBuffer); 
                  DWORD wmWritten;
                  bool fr = WriteFile(hFile, pszOutBuffer, dwSize, &amp;wmWritten, NULL);
                  int n = GetLastError();              
              }            
              // Free the memory allocated to the buffer.            
              delete [] pszOutBuffer;        
          }    
      } while (dwSize&gt;0);
  }
  
  CloseHandle(hFile);
  // 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 0;
  }
  </code></pre>
  
  <hr>
  
  <p>And the output is:</p>
  
  <pre><code>------ Build started: Project: a, Configuration: Debug Win32 ------
    a.cpp
  c:\users\admin\documents\visual studio 2010\projects\a\a\a.cpp(73): warning C4800: 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)
  a.obj : error LNK2019: unresolved external symbol __imp__WinHttpCloseHandle@4 referenced in function _main
  a.obj : error LNK2019: unresolved external symbol __imp__WinHttpReadData@16 referenced in function _main
  a.obj : error LNK2019: unresolved external symbol __imp__WinHttpQueryDataAvailable@8 referenced in function _main
  a.obj : error LNK2019: unresolved external symbol __imp__WinHttpReceiveResponse@8 referenced in function _main
  a.obj : error LNK2019: unresolved external symbol __imp__WinHttpSendRequest@28 referenced in function _main
  a.obj : error LNK2019: unresolved external symbol __imp__WinHttpOpenRequest@28 referenced in function _main
  a.obj : error LNK2019: unresolved external symbol __imp__WinHttpConnect@16 referenced in function _main
  a.obj : error LNK2019: unresolved external symbol __imp__WinHttpOpen@20 referenced in function _main
  MSVCRTD.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
  c:\users\admin\documents\visual studio 2010\Projects\a\Debug\a.exe : fatal error LNK1120: 9 unresolved externals
  ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
  </code></pre>
  
  <p>What could now be the problem? I'm trying for 2 days to make a piece of program to download a file from a given URL. It's driving me crazy! Please help me!</p>