c++ - 用 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
解决方案
推荐阅读
- javascript - REST API 到 Redux 状态 - Redux 状态的单独 API 端点?
- java - List 的未经检查的转换警告
- python - Python Pandas 中的排列和组合
- typescript - 从未在类型接口中声明的对象中删除属性
- java - Java making switch case statment shorter
- python - passing a parameter to a form in FormView Django
- c# - 在文件夹视图中,Visual Studio 2017 中的项目属性在哪里?
- azure-application-insights - Azure Application Insights 中的用户代理信息
- c++ - 执行顺序问题
- regex - 在 bash 脚本中的 case 语句中捕获模式组