首页 > 解决方案 > 用 WinHttp 替换 WinInet

问题描述

我有一个旧的 C++Builder 项目,它使用WinInet.lib函数来创建 FTP 连接。我现在想用 WinHttp 替换它,因为 Windows Server 2019 不支持 WinInet。

#pragma link "WININET.LIB"为了替换 WinInet,我在我的主 cpp 文件中注释掉了。然后,在我使用这些函数的文件中,我添加了我需要的头文件:

#include <vcl.h>
#pragma hdrstop

// Testing 2021-6-14
#include <windows.h>
#include <winhttp.h>
// Testing 2021-6-14

/* Followed by some more #include */

编译后,我收到 E2238/E2344 错误(“...的多重声明/...的早期声明”) - 我什至尝试在此文件中注释掉旧的 WinInet 函数。不知何故,我的项目仍然被链接到WinInet.lib,“取消链接”它的最简单方法是什么?

编辑 1:构建后的错误消息

[bcc32 Error] winhttp.h(115): E2238 Multiple declaration for 'HTTP_VERSION_INFO'
    Full parser context
      Export.cpp(32): #include c:\program files (x86)\embarcadero\studio\21.0\include\windows\sdk\winhttp.h
  [bcc32 Error] wininet.h(486): E2344 Earlier declaration of 'HTTP_VERSION_INFO'
    Full parser context
      Export.cpp(32): #include c:\program files (x86)\embarcadero\studio\21.0\include\windows\sdk\winhttp.h
  [bcc32 Error] winhttp.h(115): E2238 Multiple declaration for 'LPHTTP_VERSION_INFO'
    Full parser context
      Export.cpp(32): #include c:\program files (x86)\embarcadero\studio\21.0\include\windows\sdk\winhttp.h
  [bcc32 Error] wininet.h(486): E2344 Earlier declaration of 'LPHTTP_VERSION_INFO'
    Full parser context
      Export.cpp(32): #include c:\program files (x86)\embarcadero\studio\21.0\include\windows\sdk\winhttp.h
  [bcc32 Error] winhttp.h(122): E2238 Multiple declaration for 'INTERNET_SCHEME'
    Full parser context
      Export.cpp(32): #include c:\program files (x86)\embarcadero\studio\21.0\include\windows\sdk\winhttp.h
  [bcc32 Error] wininet.h(305): E2344 Earlier declaration of 'INTERNET_SCHEME'
    Full parser context
      Export.cpp(32): #include c:\program files (x86)\embarcadero\studio\21.0\include\windows\sdk\winhttp.h
  [bcc32 Error] winhttp.h(122): E2238 Multiple declaration for 'LPINTERNET_SCHEME'
    Full parser context
      Export.cpp(32): #include c:\program files (x86)\embarcadero\studio\21.0\include\windows\sdk\winhttp.h
  [bcc32 Error] wininet.h(305): E2344 Earlier declaration of 'LPINTERNET_SCHEME'
    Full parser context
      Export.cpp(32): #include c:\program files (x86)\embarcadero\studio\21.0\include\windows\sdk\winhttp.h
  [bcc32 Error] winhttp.h(167): E2238 Multiple declaration for 'URL_COMPONENTS'
    Full parser context
      Export.cpp(32): #include c:\program files (x86)\embarcadero\studio\21.0\include\windows\sdk\winhttp.h
  [bcc32 Error] wininet.h(582): E2344 Earlier declaration of 'URL_COMPONENTS'
    Full parser context
      Export.cpp(32): #include c:\program files (x86)\embarcadero\studio\21.0\include\windows\sdk\winhttp.h
  [bcc32 Error] winhttp.h(167): E2238 Multiple declaration for 'LPURL_COMPONENTS'
    Full parser context
      Export.cpp(32): #include c:\program files (x86)\embarcadero\studio\21.0\include\windows\sdk\winhttp.h
  [bcc32 Error] wininet.h(583): E2344 Earlier declaration of 'LPURL_COMPONENTS'
    Full parser context
      Export.cpp(32): #include c:\program files (x86)\embarcadero\studio\21.0\include\windows\sdk\winhttp.h
  [bcc32 Error] winhttp.h(169): E2015 Ambiguity between 'URL_COMPONENTS' and 'Winapi::Wininet::URL_COMPONENTS'
    Full parser context
      Export.cpp(32): #include c:\program files (x86)\embarcadero\studio\21.0\include\windows\sdk\winhttp.h
  [bcc32 Error] winhttp.h(169): E2238 Multiple declaration for 'URL_COMPONENTSW'
    Full parser context
      Export.cpp(32): #include c:\program files (x86)\embarcadero\studio\21.0\include\windows\sdk\winhttp.h
  [bcc32 Error] wininet.h(577): E2344 Earlier declaration of 'URL_COMPONENTSW'
    Full parser context
      Export.cpp(32): #include c:\program files (x86)\embarcadero\studio\21.0\include\windows\sdk\winhttp.h
  [bcc32 Error] winhttp.h(170): E2238 Multiple declaration for 'LPURL_COMPONENTSW'
    Full parser context
      Export.cpp(32): #include c:\program files (x86)\embarcadero\studio\21.0\include\windows\sdk\winhttp.h
  [bcc32 Error] wininet.h(577): E2344 Earlier declaration of 'LPURL_COMPONENTSW'
    Full parser context
      Export.cpp(32): #include c:\program files (x86)\embarcadero\studio\21.0\include\windows\sdk\winhttp.h

标签: c++c++buildervclwininetwinhttp

解决方案


推荐阅读