找不到GetAddrInfo标识符

时间:2016-04-05 14:32:45

标签: c++ visual-studio-2013 mfc

在尝试编译DLL以便在将在Windows XP上运行的程序中使用时,我遇到了一些错误。它们都是相似的:' GetAddrInfo:未找到标识符'以及' FreeAddrInfo:未找到标识符'。我能做的事情有限(我必须修改自2012年以来没有更新的现有代码。我是合作社,因此我的计算机科学学位尚未完成,而且我可能不知道某些事情)。我在静态库中使用MFC。我的平台工具集是Visual Studio 2013 - Windows XP(v120_xp)。我使用的是Microsoft Visual Studio Professional 2013.我的StdAfx.h包含以下代码:

#ifndef WINVER
#define WINVER 0x0501
#endif
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif
#define VC_EXTRALEAN
//...
#include <WinSock2.h>

我收到错误的Foo.cpp文件包括以下标题:

#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一起使用。我一直无法找到有关原因的信息。我的包括在错误的地方吗?

2 个答案:

答案 0 :(得分:3)

来自getaddrinfo documentation page

  

支持最低客户端| Windows 8.1,Windows Vista

但是:

  

getaddrinfo函数已添加到Windows XP及更高版本的Ws2_32.dll中。

您需要在SP2之前的XP上使用getaddrinfo而不是GetAddrInfo。在XP SP2及更高版本中,您的代码正常工作,无需执行任何操作 另请注意,ASCII模式下的GetAddrInfoGetAddrInfoA的别名,实际上是getaddrinfo的别名(即使在最近的Windows上),因此使用其中一个不是物质

奖金:

在XP之前的版本(例如,Windows 2000)上,您需要添加一个额外的标头Wspiapi.h来模拟getaddrinfo

  

要在早期版本的Windows上执行使用此功能的应用程序,则需要包含Ws2tcpip.h 和Wspiapi.h 文件。添加Wspiapi.h包含文件时,getaddrinfo函数定义为Wspiapi.h文件中的WspiapiGetAddrInfo内联函数。

答案 1 :(得分:1)

仅仅因为Windows XP不支持GetAddrInfo。如果必须使用此功能,请使用GetProcAddress获取此功能的更高版本操作系统的地址,并动态调用它。