XP上的C程序入口点inet_ntop WS2_32.dll?

时间:2013-11-16 20:37:24

标签: c windows windows-xp

我在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;
}

1 个答案:

答案 0 :(得分:1)

您的代码需要在运行时切换行为。相反,它使用条件编译来确定编译时的行为。您的#if代码在编译时进行评估。不是你想要的。实际上只编译了其中一个分支。再一次,不是你所期待的我确定。

您需要使用运行时链接(LoadLibrary和GetProcAddress)并在运行时检查操作系统的版本以确定行为。