我在windows xp上收到错误“程序入口点inet_ntop无法在动态链接库WS2_32.dll中找到”并且在一些Google搜索之后我发现inet_ntop在XP中不可用,所以我制作了一个宏来请改用inet_ntoa。但它似乎没有工作,我仍然得到同样的错误......我错过了什么?
char *get_ip(char *host)
{
struct hostent *hent;
int iplen = 39;
long errorcode;
char *ip = (char *)malloc(iplen + 1);
memset(ip, 0, iplen + 1);
if ((hent = gethostbyname(host)) == NULL)
{
perror("Could not get the IP address");
exit(1);
}
#if (_WIN32_WINNT >= 0x600)
if (inet_ntop(AF_INET, (void *)hent->h_addr_list[0], ip, iplen) == NULL)
{
perror("Could not resolve the host");
exit(1);
}
#else
ip = inet_ntoa(*((struct in_addr *)hent->h_addr_list[0]));
if (ip == NULL)
{
perror("Could not resolve the host");
exit(1);
}
#endif
return ip;
}
答案 0 :(得分:1)
您的代码需要在运行时切换行为。相反,它使用条件编译来确定编译时的行为。您的#if代码在编译时进行评估。不是你想要的。实际上只编译了其中一个分支。再一次,不是你所期待的我确定。
您需要使用运行时链接(LoadLibrary和GetProcAddress)并在运行时检查操作系统的版本以确定行为。