使用 Checkv4.exe 公用程式

重要

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

Checkv4.exe公用程式的設計訴求是為您提供程式碼移植夥伴;此公用程式會逐步執行程式代碼基底,找出可能受益於 IPv6 功能函式或結構的程式代碼,並提供建議。 使用 Checkv4.exe 公用程式,修改現有 IPv4 應用程式以支援 IPv6 的工作會變得更容易。

Checkv4.exe公用程式會安裝為適用於 Windows Vista 和更新版本 SDK 的 Microsoft Windows 軟體開發工具包 (SDK) 的一部分(最多但不包括適用於 Windows 8 的 Windows 軟體開發工具包 (SDK)。

Windows 2000 舊版 的 Checkv4.exe 公用程式也提供功能較有限的Microsoft 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