在尝试编译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一起使用。我一直无法找到有关原因的信息。我的包括在错误的地方吗?
答案 0 :(得分:3)
来自getaddrinfo
documentation page:
支持最低客户端| Windows 8.1,Windows Vista
但是:
getaddrinfo函数已添加到Windows XP及更高版本的Ws2_32.dll中。
您需要在SP2之前的XP上使用getaddrinfo
而不是GetAddrInfo
。在XP SP2及更高版本中,您的代码正常工作,无需执行任何操作
另请注意,ASCII模式下的GetAddrInfo
是GetAddrInfoA
的别名,实际上是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
获取此功能的更高版本操作系统的地址,并动态调用它。