VS2017 C++:为什么 PIP_ADAPTER_ADDRESSES 未定义?

VS2017 C++: why is PIP_ADAPTER_ADDRESSES undefined?

我正在处理一个使用 PIP_ADAPTER_ADDRESSES 类型的文件。编写这段代码的人使用的是 VS2013(我目前的工作是将代码库升级到 VS2017)。 #includes 看起来像这样:

#include <winsock2.h> // Include for security.h
#include <security.h> // Include for EXTENDED_NAME_FORMAT
#include <iphlpapi.h> // Include for PIP_ADAPTER_ADDRESSES

我在尝试编译时得到 error C2061: syntax error: identifier 'PIP_ADAPTER_ADDRESSES'。这似乎是 VS2017 中的问题,但不是 VS2013。

PIP_ADAPTER_ADDRESSES 似乎在 <IPTypes.h> 中定义,它包含在 <iphlpapi.h> 中,但它在 #ifdef _WINSOCK2API_ 块内。但是,这应该被定义,因为我包括了 <winsock2.h>。这是怎么回事?

编辑: 乍一看,该错误消息似乎并不表示它未定义,而是表示此标识符存在循环依赖性。我正在继续调查。

事实证明,在我的情况下,有另一个文件包含 <iphlpapi.h> 但不包含 <winsock2.h>,这导致我正在处理的文件出现错误。由于某种原因,此文件首先在 VS2017 中编译,但在 VS2013 中未编译。我想一定要检查所有包含的内容。

我遇到过类似的问题。当不包含 WinSock2.h 头文件时,则不声明 PIP_ADAPTER_ADDRESSES。如果包含WinSock2.h,则会生成大量错误消息。

所以,多亏了这个答案,我调查了 WinSock2.h 头文件并发现了这条评论:

#define _WINSOCKAPI_   /* Prevent inclusion of winsock.h in windows.h */

我更改了在 WinSock2.hiphlpapi.h 之后移动 Windows.h 的包含文件的顺序,这解决了问题。