文章編號: 822334 - 上次校閱: 2007年4月19日 - 版次: 3.5

注意: 無法找出程序進入點 FreeAddrInfoW,當您執行應用程式在 Windows Server 2003 上或在 Windows XP 上

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
附註 Microsoft Visual C++.NET 2002年和 Microsoft Visual C++.NET 2003年支援 Managed 程式碼模型所提供的 Microsoft.NET Framework 和不受管理的原生 Microsoft Windows 程式碼模型。本文資訊僅適用於不受管理的 Visual C++ 程式碼。

在此頁中

全部展開 | 全部摺疊

徵狀

您在執行一個應用啟用 Unicode 的程式使用此 FreeAddrInfo Windows 通訊端函式或正在執行 Microsoft Windows Server 2003 或 Microsoft Windows XP 的電腦上使用協助程式類別,例如 ATL::CSocketAddr 時您可能會收到下列錯誤訊息:
動態連結程式庫 WS2_32.dll 中找不到程序進入點 FreeAddrInfoW。

發生的原因

ws2_32.dll 文件庫並不會匯出 FreeAddrInfoW 符號,您必須要有使用 FreeAddrInfo 函式的 Unicode 版本。

解決方案

如果要解決這個問題,請依照下列步驟執行:
  1. 將 Atlsocket.h 檔案複製到您想要使用的目錄。這個檔案位於下列目錄:
    程式 Files\Microsoft Visual Studio.NET 2003\Vc7\atlmfc\include
  2. 將下列程式碼區塊加入至您在步驟 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. 啟動 Microsoft Visual C++。
  4. 按一下 [工具] 功能表 選項。[選項] 對話方塊左方展開 專案,] 然後按一下 [VC + + 目錄]。

    附註如果您使用的 Visual C++ Express 版,展開 [專案和方案],請在 [選項] 對話方塊的左窗格中,然後按一下 [VC + + 目錄
  5. 在 [顯示目錄的] 底下按一下 [包含檔案]。然後,新增的目錄修改過的 Atlsocket.h 檔案版本的清單頂端的位置。
  6. 重建應用程式

狀況說明

Microsoft 已確認這是在 < 適用於 > 一節中所列出的 Microsoft 產品中有錯誤。

其他相關資訊

如果要重現問題的步驟

  1. 啟動 Microsoft Visual Studio.NET 2003年。
  2. 在 [檔案] 功能表上指向 [新增],然後按一下 [專案]。
  3. 按一下 [專案類型] 下的 Visual C++ 專案。在 [範本] 下,然後,按一下 [Win32 主控台專案]。
  4. 在 [名稱] 方塊中輸入 範例,],然後再按一下 [確定]]。
  5. Win32 應用程式精靈] 對話方塊按一下以選取 [ATL] 和 [應用程式設定,] 之下的 [新增支援] 核取方塊,然後按一下 [完成]
  6. Sample.cpp] 檔案中以下列的程式碼取代現有的預設程式碼
    #include "stdafx.h"
    #include <atlsocket.h>
    
    void _tmain()
    {
    	CSocketAddr aSocketAddr;
    }
  7. 在 [方案總管] 中 [專案] 節點上按一下滑鼠右鍵,然後按一下 [內容]。
  8. 在 [專案 屬性頁] 對話方塊中,一般 在 [組態屬性 在左方窗格中,按一下。在右窗格設定 字元設定 屬性設定為 使用 Unicode 字元集。按一下 [確定]
  9. 在 [建置] 功能表上按一下 建置方案 來建置應用程式。您可能會注意到未編譯錯誤或連結的錯誤發生在建置程序。
  10. 偵錯] 功能表上按一下 [開始],但不偵錯]。您可能會發現您收到 < 徵狀 > 一節所述之錯誤訊息。
在 Windows Server 2003 和 Windows XP 中,Windows 通訊端 API 會加入新的 Windows 通訊端函式。GetAddrInfoFreeAddrInfo 是為處理網際網路通訊協定第 6 版 (IPv6) 和網際網路通訊協定第 4 版 (IPv4) 位址加入兩個新 Windows 通訊端函數。使用中範本程式庫 (ATL) 7.1 CSocketAddr 類別會使用這些新的 Windows 通訊端函式,以提供 IPv6 的支援。其他的 ATL 和 Microsoft 基礎類別 (MFC) 類別也使用 CSocketAddr 類別提供 IPv6 支援。 比方說 CAsyncSocket 類別和 CSMTPConnection 類別使用 CSocketAddr 類別。

附註CAsyncSocket 類別是 MFC 類別。CSMTPConnection 類別是 ATL 類別。

所描述的問題區段發生在任何 Unicode 啟用的應用程式正在執行 Windows Server 2003 或 Windows XP 的電腦上使用 FreeAddrInfo Windows 通訊端函式,在 < 徵狀 > 一節。因為 ATL CSocketAddr 類別使用 FreeAddrInfo 函式,ATL 7.1 中也發生同樣的問題。 在 ATL 7.1 和使用 CSocketAddr 類別來啟用 IPv6 支援的 MFC 7.1 任何類別會反映這種行為。比方說 CAsyncSocket 類別和 CSMTPConnection 類別使用 CSocketAddr 類別。

ATL 伺服器類別,例如 CAtlHttpClientCSoapSocketClientT 使用 ZEvtSyncSocket] 類別,並顯示相同的錯誤。ZEvtSyncSocket 內部類別會使用 CSocketAddr 類別中它的實作,就會發生這個問題。

附註CAtlHttpClient 類別提供 HTTP 用戶端支援。CSoapSocketClientT 類別提供 XML Web 服務用戶端支援。

?考

如需有關以 ATL 作的變更的詳細資訊,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站]:
http://msdn2.microsoft.com/en-us/library/aa983525(VS.71).aspx (http://msdn2.microsoft.com/en-us/library/aa983525(VS.71).aspx)
如需有關已新增至 Windows 通訊端 API 的新 Windows 通訊端函式的詳細資訊,請造訪下列 MSDN 網站:
http://msdn2.microsoft.com/en-us/library/ms740642.aspx (http://msdn2.microsoft.com/en-us/library/ms740642.aspx)

這篇文章中的資訊適用於:
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition?應用於:
    • 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 (家用版)
關鍵字:?
kbmt kbwinsock kbapi kbappdev kbbug KB822334 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:822334? (http://support.microsoft.com/kb/822334/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。