Al momento sei offline in attesa che la connessione Internet venga ristabilita

BUG: Impossibile individuare il FreeAddrInfoW di punto di voce procedura quando si esegue un'applicazione in Windows Server 2003 o in Windows XP

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

822334
Nota Microsoft Visual c ++ .NET 2002 e Microsoft Visual c ++ .NET 2003 supportano sia il modello di codice gestito fornito da Microsoft .NET Framework che il modello di codice non gestito nativo di Microsoft Windows. Le informazioni contenute in questo articolo si applicano solo al codice Visual C++ non gestito.
Sintomi
Quando si esegue un'applicazione Unicode che utilizza la funzione FreeAddrInfo Windows Sockets, o che utilizza le classi di supporto quali ATL::CSocketAddr in un computer che esegue Microsoft Windows Server 2003 o Microsoft Windows XP, viene potrebbe essere visualizzato il seguente messaggio di errore:
Impossibile trovare il FreeAddrInfoW di punto di voce procedura nella libreria di collegamento dinamico WS2_32.dll.
Cause
La libreria ws2_32.dll non verrà esportati il simbolo di FreeAddrInfoW che è necessario utilizzare la versione Unicode della funzione FreeAddrInfo .
Risoluzione
Per risolvere il problema, attenersi alla procedura descritta di seguito:
  1. Copiare il file Atlsocket.h qualsiasi directory che si desidera utilizzare. Questo file si trova nella seguente directory:
    Programmi\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include
  2. Aggiungere il seguente blocco di codice alla copia del file Atlsocket.h creato nel passaggio 1.
    //Atlsocket.h#pragma comment(lib, "ws2_32.lib")#pragma comment(lib, "mswsock.lib")//Start of Addition#if _WIN32_WINNT < 0x0502  #define ADDRINFOT addrinfo  #define GetAddrInfo getaddrinfo  #define FreeAddrInfo freeaddrinfo#endif//End of Addition namespace ATL
  3. Avviare Microsoft Visual c ++.
  4. Scegliere Opzioni dal menu Strumenti . Nel riquadro sinistro della finestra di dialogo Opzioni , espandere i progetti e quindi fare clic su Directory di VC ++ .

    Nota Se si utilizza Visual c ++ Express Edition, espandere progetti e soluzioni nel riquadro sinistro della finestra di dialogo Opzioni e quindi fare clic su Directory di VC ++ .
  5. In Mostra directory per , fare clic su file di inclusione . Quindi, aggiungere la directory in cui si trova la versione modificata del file Atlsocket.h in cima all'elenco.
  6. Rigenerare l'applicazione
Status
Microsoft ha confermato che questo un bug nei prodotti sono elencati nella sezione "Si applica a".
Informazioni

Procedura per riprodurre il problema

  1. Avviare Microsoft Visual Studio .NET 2003.
  2. Scegliere Nuovo dal menu file , quindi progetto .
  3. Fare clic su progetti di Visual c ++ in Tipi progetto . Quindi fare clic su Progetto Console Win32 in modelli .
  4. Nella casella nome digitare esempio e quindi fare clic su OK .
  5. Nella finestra di dialogo Creazione guidata applicazione Win32 , fare clic per selezionare la ATL e le caselle di controllo Aggiungi supporto per in Impostazioni applicazione e scegliere Fine .
  6. Nel file Sample.cpp, sostituire il codice di predefinito esistente con il codice riportato di seguito.
    #include "stdafx.h"#include <atlsocket.h>void _tmain(){	CSocketAddr aSocketAddr;}
  7. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nodo progetto e quindi fare clic su Proprietà .
  8. Nella finestra di dialogo Pagine delle proprietà di progetto, scegliere Generale in Proprietà di configurazione del riquadro di sinistra. Nel riquadro destro, impostare il carattere imposta proprietà utilizza set di caratteri Unicode . Fare clic su OK .
  9. Scegliere dal menu Genera , Genera soluzione per generare l'applicazione. È possibile notare che nessun errore di compilazione o il collegamento degli errori si verificano durante il processo di generazione.
  10. Nel menu debug , fare clic su avvio senza debug . È possibile notare che è visualizzato il messaggio di errore è descritto nella sezione "Sintomi".
In Windows Server 2003 e in Windows XP, le nuove funzioni di Windows Sockets vengono aggiunti all'API di socket di Windows. GetAddrInfo e di FreeAddrInfo sono le nuove funzioni Windows Sockets due che vengono aggiunti per gestire gli indirizzi in con Internet Protocol versione 6 (IPv6) e Internet Protocol versione 4 (IPv4). La classe di ATL (Active Template Library) 7.1 CSocketAddr utilizza queste nuove funzioni di Windows Socket per fornire il supporto per IPv6. Altre classi ATL e MFC (Microsoft Foundation Classes) utilizzano anche la classe di CSocketAddr per fornire il supporto di IPv6. Ad esempio, la classe CAsyncSocket e la classe di CSMTPConnection utilizzare la classe di CSocketAddr .

Nota La classe CAsyncSocket è una classe MFC. La classe di CSMTPConnection è una classe ATL.

Il problema descritto nella sezione "Sintomi" sezione si trova in qualsiasi applicazione abilitato per Unicode che utilizza la funzione di Windows Socket FreeAddrInfo in un computer che esegue Windows Server 2003 o Windows XP. Poiché la classe ATL CSocketAddr utilizza la funzione FreeAddrInfo , lo stesso problema si verifica anche in ATL 7.1. Qualsiasi classe in ATL 7.1 e 7.1 MFC che utilizza la classe CSocketAddr per attivare il supporto di IPv6 riflette questo comportamento. Ad esempio, la classe CAsyncSocket e la classe di CSMTPConnection utilizzare la classe di CSocketAddr .

Classi ATL server, ad esempio CAtlHttpClient e CSoapSocketClientT utilizzano la classe ZEvtSyncSocket e visualizzano l'errore stesso. Questo comportamento si verifica perché la classe interna ZEvtSyncSocket utilizza la classe CSocketAddr nell'implementazione.

Nota La classe di CAtlHttpClient fornisce il supporto client HTTP. La classe di CSoapSocketClientT fornisce il supporto client di servizi Web XML.
Riferimenti
Per ulteriori informazioni sulle modifiche che sono state apportate ad ATL, visitare il seguente sito Web MSDN (informazioni in lingua inglese):Per ulteriori informazioni sulle nuove funzioni di Windows Socket che sono stati aggiunti all'API di socket di Windows, visitare il seguente sito Web MSDN:

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 822334 - Ultima revisione: 04/19/2007 09:03:03 - Revisione: 3.5

  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • kbmt kbwinsock kbapi kbappdev kbbug KB822334 KbMtit
Feedback