2013-12-16 5 views
2
C:\Users\Chan\Desktop\test - fail\winsock2 socket server.cpp: In function `int _tmain()': 
C:\Users\Chan\Desktop\test - fail\winsock2 socket server.cpp:48: error: `getaddrinfo' was not declared in this scope 
C:\Users\Chan\Desktop\test - fail\winsock2 socket server.cpp:59: error: `freeaddrinfo' was not declared in this scope 
C:\Users\Chan\Desktop\test - fail\winsock2 socket server.cpp:68: error: `freeaddrinfo' was not declared in this scope 
C:\Users\Chan\Desktop\test - fail\winsock2 socket server.cpp:74: error: `freeaddrinfo' was not declared in this scope 

Используя этот заголовок файлыКак решить эту ошибку winsock?

#include "winsock2.h" 
#include "windows.h" 
#include "WS2tcpip.h" 
+0

Просто угадайте ... Отключите компиляцию UNICODE или используйте Unicode-версии этих функций, в частности ['GetAddrInfoW'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ ms738519 (v = vs.85) .aspx) и ['FreeAddrInfoW'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms737912 (v = vs.85) .aspx) – WhozCraig

ответ

1

Файл заголовка WS2tcpip.h использует это определить:

#if (_WIN32_WINNT >= 0x0600) 

Это означает, что в вашей сборке вы должны определить _WIN32_WINNT к 0x600 (Vista) или выше , Это означает, что API, который вы хотите, не существует в WinXP.

+0

Это похоже на источник ошибки, хотя файл заголовка не согласуется с документацией (и с наблюдаемой реальностью). Версия Unicode была добавлена ​​с пакетом обновления 2 (SP2) для Windows XP, а версия, отличная от юникода, существовала со времен W2k. – Damon

Смежные вопросы