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

Traduzione articoli Traduzione articoli
Identificativo articolo: 822334 - Visualizza i prodotti a cui si riferisce l?articolo.
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.
Espandi tutto | Chiudi tutto

In questa pagina

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):
http://msdn2.microsoft.com/en-us/library/aa983525(VS.71).aspx
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:
http://msdn2.microsoft.com/en-us/library/ms740642.aspx

Proprietà

Identificativo articolo: 822334 - Ultima modifica: giovedì 19 aprile 2007 - Revisione: 3.5
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition alle seguenti piattaforme
    • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
    • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
    • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
    • Microsoft Windows Server 2003, Web Edition
    • Microsoft Windows XP Professional
    • Microsoft Windows XP Home Edition
Chiavi: 
kbmt kbwinsock kbapi kbappdev kbbug KB822334 KbMtit
Traduzione automatica articoli
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.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 822334
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com