c++ visual-studio-2013 mfc

c++ - Identificador GetAddrInfo no encontrado



visual-studio-2013 mfc (2)

Recibo un par de errores cuando intento compilar un archivo DLL para utilizarlo en un programa que se ejecutará en Windows XP. Ambos son similares: ''GetAddrInfo: identifier not found'' y ''FreeAddrInfo: identifier not found''. Estoy limitado en lo que puedo hacer (debo modificar el código existente que no se ha actualizado desde 2012. Soy cooperativo, por lo que mi título en ciencias de la computación aún no está completo y es posible que no sepa ciertas cosas ) Estoy usando MFC en una biblioteca estática. Mi conjunto de herramientas de plataforma es Visual Studio 2013 - Windows XP (v120_xp). Estoy usando Microsoft Visual Studio Professional 2013. My StdAfx.h incluye el siguiente código:

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

El archivo Foo.cpp del que recibo el error incluye los siguientes encabezados:

#include "stdafx.h" #include <stdio.h> #include <WinIoctl.h> #include <process.h> #include <Windows.h> #include <MMSystem.h> #include <Mstcpip.h> #include <WS2tcpip.h>

Mi versión de WS2tcpip.h es del SDK de Windows 7.1A. Si lo abro, puedo ver que GetAddrInfo () y FreeAddrInfo () están definidos, pero por alguna razón, VS2013 no encuentra esas definiciones (aunque puede encontrar el archivo de encabezado y no tiene problemas para incluirlas).

Nota adicional: si cambio las #defines en StdAfx.h a:

#define WINVER 0x0600 #define _WIN32_WINNT 0x0600

y use el conjunto de herramientas regular de Visual Studio 2013, no tengo problemas para compilar el archivo DLL. Desafortunadamente, la DLL debe funcionar con Windows XP. No he podido encontrar ninguna información sobre por qué esto podría ser. ¿Podría mi incluye estar en el lugar equivocado?


Desde la página de documentación de getaddrinfo :

Cliente mínimo soportado | Windows 8.1, Windows Vista

Sin embargo :

La función getaddrinfo se agregó a Ws2_32.dll en Windows XP y posterior.

Solo necesita usar getaddrinfo lugar de GetAddrInfo en XP antes de SP2. En XP SP2 y posterior, su código simplemente funciona, nada que hacer.
Como nota al GetAddrInfo , GetAddrInfo en modo ASCII es un alias de GetAddrInfoA , que en realidad es un alias de getaddrinfo (incluso en Windows reciente), por lo que usar uno u otro no importa.

Bonificación:

En versiones anteriores a XP (por ejemplo, Windows 2000), debe incluir un encabezado adicional, Wspiapi.h , para emular getaddrinfo :

Para ejecutar una aplicación que utiliza esta función en versiones anteriores de Windows, debe incluir los archivos Ws2tcpip.hy Wspiapi.h . Cuando se agrega el archivo de inclusión Wspiapi.h, la función getaddrinfo se define a la función en línea WspiapiGetAddrInfo en el archivo Wspiapi.h.


Simplemente porque GetAddrInfo no es compatible con Windows XP. Si debe usar esta función, use GetProcAddress para obtener la dirección de esta función para una versión superior del sistema operativo y llámela de forma dinámica.