ID do artigo: 822334 - Última revisão: quinta-feira, 19 de abril de 2007 - Revisão: 3.5

Erro: Não é possível localizar o FreeAddrInfoW de ponto de entrada do procedimento quando você executa um aplicativo no Windows Server 2003 ou no Windows XP

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Observação Microsoft Visual C++ .NET 2002 e Microsoft Visual C++ .NET 2003 oferecem suporte o modelo de código gerenciado fornecido pelo Microsoft .NET Framework e o modelo de código do Windows de Microsoft nativo não gerenciado. As informações neste artigo se aplicam somente ao código do Visual C++ não gerenciado.

Nesta página

Expandir tudo | Recolher tudo

Sintomas

Quando você executa um aplicativo habilitado para Unicode, que usa a função FreeAddrInfo Windows Sockets, ou que usa classes auxiliares, como ATL::CSocketAddr em um computador que está executando o Microsoft Windows Server 2003 ou Microsoft Windows XP, você receberá a seguinte mensagem de erro:
O FreeAddrInfoW de ponto de entrada do procedimento não pôde ser localizado na biblioteca de vínculo dinâmico WS2_32.dll.

Causa

A biblioteca ws2_32.dll não exporta o símbolo FreeAddrInfoW que você deve ter para usar a versão Unicode da função FreeAddrInfo .

Resolução

Para resolver esse problema, execute essas etapas:
  1. Copie o arquivo Atlsocket.h para qualquer diretório que você deseja usar. Esse arquivo está localizado no seguinte diretório:
    Programa de Programas\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include
  2. Adicionar o bloco de código a seguir à cópia do arquivo Atlsocket.h que você criou na etapa 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. Inicie o Microsoft Visual C++.
  4. No menu Ferramentas , clique em Opções . No painel esquerdo da caixa de diálogo Opções , expanda projetos e, em seguida, clique em Diretórios VC ++ .

    Observação Se você estiver usando o Visual C++ Express Edition, expanda projetos e soluções no painel esquerdo da caixa de diálogo Opções e, em seguida, clique em Diretórios VC ++ .
  5. Em Mostrar diretórios para , clique em incluir arquivos . Em seguida, adicione o diretório onde a versão modificada do arquivo Atlsocket.h está localizado para o topo da lista.
  6. Você recriar aplicativo

Situação

A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Mais Informações

Etapas para reproduzir o problema

  1. Inicie o Microsoft Visual Studio .NET 2003.
  2. No menu arquivo , aponte para novo e, em seguida, clique em Project .
  3. Clique em projetos do Visual c++ em tipos de projeto . Em seguida, clique em Projeto de console do Win32 em modelos .
  4. Na caixa nome , digite exemplo e, em seguida, clique em OK .
  5. Na caixa de diálogo do Assistente de aplicativos Win32 , clique para selecionar o ATL e as caixas de seleção Adicionar suporte para em Configurações do aplicativo e, em seguida, clique em Concluir .
  6. No arquivo Sample.cpp, substitua o código padrão existente com o código a seguir.
    #include "stdafx.h"
    #include <atlsocket.h>
    
    void _tmain()
    {
    	CSocketAddr aSocketAddr;
    }
  7. No Solution Explorer, clique com o botão direito no nó do projeto e, em seguida, clique em Propriedades .
  8. Clique na caixa de diálogo Property Pages projeto, em Geral em Configuration Properties no painel esquerda. No painel direito, defina o caracteres definir propriedade Conjunto de caracteres do usar Unicode . Clique em OK .
  9. No menu Build , clique em Build Solution para criar o aplicativo. Você pode perceber que não erros de compilação ou vinculação erros ocorrem durante o processo de compilação.
  10. No menu Debug , clique em Iniciar sem depuração . Você pode perceber que você recebe a mensagem de erro descrita na seção "Sintomas".
No Windows Server 2003 e no Windows XP, as funções de Windows Sockets novas são adicionadas à API de soquete do Windows. GetAddrInfo e FreeAddrInfo são as duas novas Windows Sockets funções que são adicionadas para lidar com a versão 6 (IPv6) e Internet Protocol versão 4 (IPv4) endereços. A classe da Biblioteca ATL (Active Template) 7.1 CSocketAddr usa essas novas funções de soquete do Windows para fornecer suporte para IPv6. Outras classes ATL e MFC (Microsoft Foundation Classes) também usar a classe CSocketAddr para fornecer suporte a IPv6. Por exemplo, a classe CAsyncSocket e a classe CSMTPConnection usar a classe CSocketAddr .

Observação A classe CAsyncSocket é uma classe do MFC. A classe CSMTPConnection é uma classe ATL.

O problema é descrito em "Sintomas" seção ocorre em qualquer aplicativo habilitado para Unicode que usa a função de Windows Socket FreeAddrInfo em um computador que está executando o Windows Server 2003 ou o Windows XP. Como a classe ATL CSocketAddr usa a função FreeAddrInfo , o mesmo problema também ocorre em ATL 7.1. Qualquer classe no 7.1 ATL e MFC 7.1 que usa a classe CSocketAddr para habilitar o suporte a IPv6 reflete esse comportamento. Por exemplo, a classe CAsyncSocket e a classe CSMTPConnection usar a classe CSocketAddr .

Classes de servidor ATL, como CAtlHttpClient e CSoapSocketClientT usam a classe ZEvtSyncSocket e exibem o mesmo erro. Esse comportamento ocorre porque a classe interna ZEvtSyncSocket usa a classe CSocketAddr em sua implementação.

Observação A classe CAtlHttpClient fornece suporte a cliente HTTP. A classe CSoapSocketClientT fornece suporte a cliente serviços da Web XML.

Referências

Para obter mais informações sobre as alterações que foram feitas para ATL, visite o seguinte site da Web Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/aa983525(VS.71).aspx (http://msdn2.microsoft.com/en-us/library/aa983525(VS.71).aspx)
Para obter mais informações sobre novas funções de soquete do Windows que foram adicionados à API de soquete do Windows, visite o seguinte site da MSDN:
http://msdn2.microsoft.com/en-us/library/ms740642.aspx (http://msdn2.microsoft.com/en-us/library/ms740642.aspx)

A informação contida neste artigo aplica-se a:
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition nas seguintes plataformas
    • 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
Palavras-chave: 
kbmt kbwinsock kbapi kbappdev kbbug KB822334 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 822334  (http://support.microsoft.com/kb/822334/en-us/ )