共用方式為


使用 Checkv4.exe 公用程式

重要

Checkv4.exe公用程式不會隨附於適用於 Windows 8 的 Windows 軟體開發工具包(SDK),也不會隨附於更新版本的 Windows SDK 中。

Checkv4.exe 公用程式設計為成為您程式碼移植的好夥伴;此工具會與您一起逐步檢視您的程式代碼基底,找出可能的問題或強調可以從 IPv6 功能或結構中受益的程式碼,並提供建議。 使用 Checkv4.exe 公用程式,修改現有 IPv4 應用程式以支援 IPv6 的工作會變得更容易。

Checkv4.exe 公用程式會作為 Microsoft Windows 軟體開發套件 (SDK) 的一部分安裝,適用於 Windows Vista 和之後的 SDK,但不包括 Windows 8 的 SDK。

較早版本的 Checkv4.exe 公用程式,功能較為有限,也曾作為 Microsoft 早期 Windows 2000 的 IPv6 技術預覽的一部分提供。

下列各節說明如何使用 Checkv4.exe 公用程式,然後說明修改現有 IPv4 應用程式以支援 IPv6 的建議方法。

執行Checkv4.exe的建議

  • Checkv4.exe公用程序很簡單。 只要在命令行執行Checkv4.exe,即可使用您想要檢查為 參數的檔名。 Checkv4.exe剖析檔案,並提供意見反應,說明該檔案中存在IPv6移植問題的位置。 將 Checkv4.exe 放入計算機的路徑,可讓您更輕鬆地從原始程式碼目錄結構中的任何位置執行 Checkv4.exe 公用程式。 例如,將Checkv4.exe放入 %windir% 可讓您從電腦上的任何目錄啟動Checkv4.exe,而不包含其路徑。

  • 在命令提示字元發出下列命令,以剖析 Simplec.c 檔案:

    Checkv4 simplec.c

    請注意,Checkv4.exe 公用程式的一些建議需要結構,這些結構僅在最近版本的 Ws2tcpip.h 頭檔中可用,例如 SOCKADDR_IN6 結構。 這些頭檔包含在適用於 Windows Vista 和更新版本的 Windows SDK 中。 這些標頭檔也包含在 Windows Server 2003 發行的舊版平臺軟體開發工具套件 (SDK) 中。

    下列螢幕快照會顯示在 附錄 A 中包含的 Simplec.c 檔案上使用 Checkv4.exe 公用程式的結果:

    checkv4.exe 報告 simplec.c 檔案中的 IPv6 不相容性

    下列螢幕快照會顯示在Simples.c 檔案上使用 Checkv4.exe 公用程序的結果,該公用程式也包含在附錄 A 中:

    checkv4.exe 報告 simples.c 檔案中的 IPv6 不兼容性

應用程式修改程式:要從何處開始

有一個建議的程序與將 IPv6 功能新增至應用程式的過程相關。 遵循此順序是有益的,因為它可讓開發人員確保已採取修改現有IPv4應用程式以支援IPv6所需的所有步驟。 某些應用程式可能需要更廣泛地注意下列其中一個序列;例如,系統服務的使用者介面問題可能比圖形檔傳輸程式 (FTP) 少。

若要修改 IPv4 應用程式以支援 IPv6

  1. 修正結構和宣告,以啟用IPv6和IPv4相容性。

  2. 修改函式呼叫以利用已啟用 IPv6 的函式,例如 getaddrinfo 和 getnameinfo 函式。

  3. 檢閱原始程式碼,確認是否使用硬編碼的 IPv4 位址,例如回送位址,或使用其他常值字串。

  4. 執行使用者介面的完整檢閱,包括參考對話框。 請思考是否適合啟用 IPv6 的應用程式來指定或提供 IP 位址型資訊。

  5. 判斷您的應用程式是否依賴基礎通訊協定,例如 RPC,並進行適當的程式設計變更來處理 IPv6 位址。

  6. 在 Windows XP 和更新版本上編譯應用程式時,請使用編譯時間旗標IPV6STRICT。 此旗標會導致不相容的程式代碼無法編譯,如下所示:

    具有不相容程式代碼的 Windows Sockets 1.x 應用程式無法編譯並傳回錯誤訊息「WINSOCK2必要」。

    Windows Sockets 2.x 應用程式中的不相容程式代碼會導致在編譯時,每處不相容程式代碼都出現錯誤。 錯誤訊息會產生以下格式:

    [file name] ([line number]) : [error message] '[symbol]_IPV6INCOMPATIBLE'

    例如:

    sample.c(8) : error C2065: 'gethostbyaddr_IPV6INCOMPATIBLE' : undeclared identifier