尝试编译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模式下的GetAddrInfoGetAddrInfoA的别名,它实际上是getaddrinfo的别名(即使在最近的Windows上也是如此),因此使用一个或另一个都不重要。

奖励:

在XP之前的版本(例如Windows 2000)上,您需要包含一个附加头Wspiapi.h,以模拟getaddrinfo:

关于c++ - 找不到GetAddrInfo标识符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36429384/

10-13 08:06