2012-02-05 3 views

risposta

21

@ risposta di costo links ad una discussione che, tra le altre cose, chiede questa domanda che non è mai stato risposto:

C'è un motivo per cui non riesco a comprendere windows.h prima Winsock2.h, mi dà un sacco di errori, ma una volta che ho cambiato il loro ordine tutto va bene ... perché è così?

windows.h include winsock2.h durante la compilazione di versioni più recenti di Windows, ma per lo sviluppo più vecchio include winsock.h invece. Il problema non è limitato a solo windows.h, tuttavia. Ogni volta che winsock.h viene incluso prima dello winsock2.h, ci saranno errori del compilatore. Il motivo è perché i due file NON coesistono molto bene. winsock2.h è stato progettato per sostituirewinsock.h, non estenderlo. Tutto ciò che è definito in winsock.h è anche definito in winsock2.h. Se winsock2.h è incluso prima di winsock.h, winsock2.h definisce _WINSOCKAPI_ per impedire l'elaborazione del compilatore successiva winsock.h include, e tutto va bene. Ma se winsock.h è incluso prima di winsock2.h, winsock2.h non lo rileva e tenta di ridefinire tutto ciò che è già stato definito da winsock.h, causando il fallimento della compilazione.

È necessario prestare molta attenzione quando si mescola il codice che utilizza winsock.h con il codice che utilizza winsock2.h nello stesso progetto. Ad esempio, quando si scrive il proprio codice socket che utilizza winsock2.h e si utilizzano librerie di terze parti che utilizzano ancora winsock.h.

6

È necessario utilizzare winsock2.h a meno che non si desideri utilizzare Winsock 1.1. winsock2.h è per Winsock 2.

Ulteriori informazioni a riguardo sono disponibili allo Wikipedia Winsock page.