尝试编译DLL以在将要在Windows XP上运行的程序中使用时,出现几个错误。它们都是相似的:“GetAddrInfo:找不到标识符”和“FreeAddrInfo:找不到标识符”。我的工作受到限制(我必须修改自2012年以来未更新的现有代码。我是一名合作社,所以我的计算机科学学位尚未完成,并且我可能不知道某些事情)。我在静态库中使用MFC。我的平台工具集是Visual Studio 2013-Windows XP(v120_xp)。我正在使用Microsoft Visual Studio Professional2013。我的StdAfx.h包含以下代码:
#ifndef WINVER
#define WINVER 0x0501
#endif
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif
#define VC_EXTRALEAN
//...
#include <WinSock2.h>
我从中收到错误的Foo.cpp文件包含以下 header :
#include "stdafx.h"
#include <stdio.h>
#include <WinIoctl.h>
#include <process.h>
#include <Windows.h>
#include <MMSystem.h>
#include <Mstcpip.h>
#include <WS2tcpip.h>
我的WS2tcpip.h版本来自Windows 7.1A SDK。如果打开它,我可以看到定义了GetAddrInfo()和FreeAddrInfo(),但是由于某种原因,VS2013找不到这些定义(尽管它可以找到头文件本身,并且包括它们也没有问题)。
附加说明:如果我将StdAfx.h中的#defines更改为:
#define WINVER 0x0600
#define _WIN32_WINNT 0x0600
并使用常规的Visual Studio 2013工具集,编译DLL不会出现问题。不幸的是,DLL必须与Windows XP一起使用。我一直找不到任何可能的信息。我的收件地址可能在错误的位置吗?
最佳答案
从getaddrinfo
documentation page:
但是:
在SP2之前的XP中,您只需要使用getaddrinfo
而不是GetAddrInfo
。在XP SP2和更高版本上,您的代码可以正常工作,而无需执行任何操作。
附带说明一下,ASCII模式下的GetAddrInfo
是GetAddrInfoA
的别名,它实际上是getaddrinfo
的别名(即使在最近的Windows上也是如此),因此使用一个或另一个都不重要。
奖励:
在XP之前的版本(例如Windows 2000)上,您需要包含一个附加头Wspiapi.h
,以模拟getaddrinfo
:
关于c++ - 找不到GetAddrInfo标识符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36429384/