我想在 Windows 通用应用 (x64) 中使用 curl。
我设法让它工作,但我不得不使用一个看起来很老套的解决方法,我想确认它是否需要。
TL;DR - 我必须添加 #include <winsock2.h>
#include <curl\curl.h>
之前的声明声明,让它工作。我想知道 UWP 是否真的需要它。
我按照 curl 安装指南使用 openssl 构建了 curl here .我在 Visual Studio 2015 update 3 中创建了一个空白的通用应用程序,并在适当的位置添加了 curl 和 openssl 二进制文件并包含在内。然后加了一个#include <curl\curl.h>
在文件顶部并出现以下错误:
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
对于 typedef SOCKET curl_socket_t;
行在 curl.h
.
在 curl.h
的顶部我看到以下预处理器宏阻止包含 winsock2.h
它定义了 SOCKET
:
#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || \
defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H))
/* The check above prevents the winsock2 inclusion if winsock.h already was
included, since they can't co-exist without problems */
#include <winsock2.h>
#include <ws2tcpip.h>
#endif
删除 defined(_WINSOCKAPI_)
条件恢复语句并且一切编译正常,这意味着某处 winsock.h
包含在内并且在 UWP 上它没有定义 SOCKET
.
的确,看着winsock.h
我可以看到 typedef
它定义了 SOCKET
包裹着
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
不适用于通用应用。
然而,在winsock2.h
有一个等效的 typedef
对于 SOCKET
不会被预处理器丢弃。
添加#include <winsock2.h>
在 #include <curl\curl.h>
之前声明使一切正常,但我怀疑这不是解决此问题的最佳方法。
所以我的问题是,这是在 UWP 上使用 curl 的正确方法还是有人找到了更好的解决方案?
谢谢!
最佳答案
一般在
顺便说一句,curl有条件地包含
关于c++ - 在 Windows 通用应用程序中使用 curl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38867778/