用 WinHttp 替换 WinInet

问题描述

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

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

#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 错误(“Multiple declaration for.../Earlier declaration of...”) - 我什至尝试在此文件中注释掉旧的 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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)