其Version-Independent名稱和目標為特定版本的 Windows
在許多情況下,Windows篩選平臺 () API 提供多個版本的函式或結構。
即使只有一個版本,仍會以版本號碼結尾,例如 「0」 或 「1」 的大部分資料和函式名稱。
fwpvi.h 中的版本對應
fwpvi.h 標頭檔是從 Windows 7 SDK 和 WDK 開始包含。 此標頭檔會將無版本 API 名稱對應至適合用於指定作業系統的版本。
例如,以下是 Windows 8 SDK 中包含的 fwpvi.h 版本的簡短摘錄。
#define FwpmNetEventCreateEnumHandle FwpmNetEventCreateEnumHandle0
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define FwpmNetEventEnum FwpmNetEventEnum2
#elif (NTDDI_VERSION >= NTDDI_WIN7)
#define FwpmNetEventEnum FwpmNetEventEnum1
#else
#define FwpmNetEventEnum FwpmNetEventEnum0
#endif
如上所示,只有一個 版本的 FwpmNetEventCreateEnumHandle – FwpmNetEventCreateEnumHandle0 – 因此任何 對 FwpmNetEventCreateEnumHandle 的呼叫一律會呼叫 FwpmNetEventCreateEnumHandle0,而不論以作業系統為目標。
不過, FwpmNetEventEnum有三個版本: FwpmNetEventEnum0、 FwpmNetEventEnum1和 FwpmNetEventEnum2。 fwpvi.h 標頭檔可確保 呼叫 FwpmNetEventEnum 會呼叫最適合目標作業系統的版本:
- 適用于 Windows 8 (或更新版本的FwpmNetEventEnum2)
- Windows 7 的目標為FwpmNetEventEnum1
- 適用于舊版作業系統的FwpmNetEventEnum0 (,例如 Windows Vista 或 service Pack 1 (SP1 Windows Vista) )
呼叫Version-Independent函式和結構
建議以特定作業系統或 WDK 版本為目標的一律針對與版本無關的宏進行程式設計。 這會自動選取您目標作業系統中支援的最新版本。 建議使用最新的標頭檔,即使以先前的作業系統為目標亦然。 以一致的方式執行此動作可確保使用最新的支援版本,也可讓您更輕鬆地維護及更新程式碼。
其會說明編號 API 的每個版本。 如果有多個版本存在,則表示目標作業系統。 不過,開發人員通常會想要呼叫與版本無關的 (無號碼) API,並指出目標作業系統 (,例如 Windows Vista 的NTDDI_WIN6,或NTDDI_WIN8 Windows 8) 。
若要確保正確處理在不同版本中採用不同參數的函式,您可以包含條件式區塊,例如 #if (NTDDI_VERSION >= NTDDI_WIN7)
。