C точка входа в процедуру процедуры inet_ntop WS2_32.dll на XP?

Вопрос: Я получаю сообщение об ошибке в Windows XP: "Точка входа процедуры inet_ntop не может быть расположена в динамической библиотеке ссылок WS2_32.dll", и после некоторого Googling я обнаружил, что inet_ntop недоступен в XP, поэтому я сделал макрос для использования inet_ntoa вместо, Но, похоже, он не работает, я все равно получаю ту же ошибку... Я что-то

Вопрос:

Я получаю сообщение об ошибке в Windows XP: “Точка входа процедуры inet_ntop не может быть расположена в динамической библиотеке ссылок WS2_32.dll”, и после некоторого Googling я обнаружил, что 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; } Лучший ответ:

Ваш код должен переключать поведение во время выполнения. Вместо этого он использует условную компиляцию, которая определяет поведение во время компиляции. Ваш код #if оценивается во время компиляции. Не то, что вы намеревались ожидать. Только одна из этих ветвей фактически скомпилирована. Опять же, не то, что вы ожидали, я уверен.

Вам нужно использовать ссылку на время выполнения (LoadLibrary и GetProcAddress) и проверить версию ОС во время выполнения, чтобы определить поведение.

Оцените статью
Добавить комментарий