2016-04-18 17 views
8

sto usando Visual Studio 2015 e si tenta di compilare il codice che ha lavorato prima ho aggiornato da VS 2013.'ind_inet': Usa inet_pton() o InetPton() al posto o definire _WINSOCK_DEPRECATED_NO_WARNINGS

'inet_addr' : usa inet_pton() o InetPton (invece) oppure definire _WINSOCK_DEPRECATED_NO_WARNINGS

partner.sin_addr.s_addr = inet_addr(ip.c_str()); 

ho cercato di utilizzare le funzioni citate ma erano indefinito. Ho provato a definire la macro in molti punti diversi ma non è successo nulla. Un altro thread ha detto che dovrei includere Ws2tcpip.h invece di WinSock2 & aggiungere Ws2_32.lib. Ho già aggiunto la libreria e quando ho usato l'inclusione non è successo nulla. Cosa sta succedendo?!

+0

Potrebbe essere che questo modello aziendale Microsoft non sia retrocompatibile tra diversi Visual Studio? Venendo da Python questo è semplicemente folle –

risposta

8

La stringa ip può essere convertita nella struttura in_addr con la funzione InetPton. Esso viene utilizzato in questo modo:

InetPton(AF_INET, strIP, &ipv4addr) 

è necessario includere il file di intestazione "Ws2tcpip.h", utilizzare la libreria "Ws2_32.lib" e DLL "Ws2_32.dll".

0

assicuratevi di definire _WINSOCK_DEPRECATED_NO_WARNINGS prima di tutto l'inclusione.

+0

questo dovrebbe essere nella parte di commento. –

+0

Non sono d'accordo con il commento di @V-rund Puro-hit. Definire _WINSOCK_DEPRECATED_NO_WARNINGS è davvero il modo più semplice per farlo funzionare. Nessuna modifica del codice sorgente necessaria, non sono necessarie altre librerie. –

3

Si può provare

#pragma warning (disable: 4996)

per l'utilizzo di inet_addr().

3

Giusto per rendere chiara la conversione. Diciamo che dispone di codice utilizzando il deprecato inet_addr come in questo esempio:

RecvAddr.sin_addr.s_addr = inet_addr("192.168.1.1"); 

Potrebbe essere convertito il più recente InetPton come segue:

InetPton(AF_INET, _T("192.168.1.1"), &RecvAddr.sin_addr.s_addr); 

Il _T macro impedisce il "const char incompatibile con PCWSTR "errore.