重要
本主題中的資訊適用於所有 Windows 10 版本及更新版本。 以下將這些版本統稱為「Windows」,如有必要,會特別註明例外情況。
傘式函式庫是你連結的單一函式庫,涵蓋部分 Win32 API。 例如,一個名為 OneCore.lib 的總函式庫涵蓋了所有 Windows 裝置共用的 Win32 API 子集。
傘式連結庫中的 API 可以跨一系列模組實作(其中模組是 API 集 或 DLL)。 但傘式程式庫會替您隱藏這些細節,讓您的應用程式更容易在不同作業系統版本之間移植。 在你的桌面應用程式或驅動程式中,連結涵蓋你感興趣 API 集合的總體函式庫,這就是你所需要做的全部。
傘式函式庫涵蓋的內容
傘狀函式庫涵蓋 精選的 API 子集。 它並非每個模組中所有 API 的完整索引,且某個 API 不一定存在於所有總函式庫中。
函式庫涵蓋的 API 集合也會依你所建置的 Windows SDK 版本而有所不同。 後期的 SDK 可以新增早期 SDK 沒有的覆蓋範圍。
基於以上兩個原因,請將個別 API 的參考頁面視為該連結哪個函式庫的權威。 該 頁面的需求表 會標示該 API 的函式庫。
可用函式庫
| 圖書館 | 描述 |
|---|---|
| OneCore.lib | 涵蓋所有 Windows 裝置共用的 Win32 API 子集。 請連結至 OneCore.lib(而不要連結至任何其他 Win32 傘狀程式庫),才能存取這些 API。 如果你連結 OneCore.lib,且只呼叫它涵蓋的 Win32 API,那麼你的桌面應用程式或驅動程式就能在所有 Windows 裝置上成功載入。 |
| OneCore_apiset.lib |
OneCore.lib 的 API 集合變體。 若有 API 集合名稱,則透過 直接匯入 API 集合來解析,因此載入時不需中間轉發模組。 連結到該 API 集合的二進位檔,並不保證能在早於其匯入之 API 集合推出的 Windows 版本上直接執行。 |
| OneCoreUAP.lib | 涵蓋所有支援 Windows 執行階段(WinRT) 的 Windows 裝置共用的 Win32 API 子集。 連結至 OneCoreUAP.lib(而不是其他任何 Win32 傘式函式庫),才能使用這些 API。 如果你連結 OneCoreUAP.lib,且只呼叫它涵蓋的 Win32 API,那麼你的桌面應用程式或驅動程式就能在所有支援 WinRT 的 Windows 裝置上成功載入。 |
| OneCoreUAP_apiset.lib |
OneCoreUAP.lib 的 API 集變體。 若有 API 集合名稱,則透過 直接匯入 API 集合來解析,因此載入時不需中間轉發模組。 連結到其匯入之 API 集的二進位檔,並不保證能在早於這些 API 集發行的 Windows 版本上不經修改直接執行。 |
不要把兩個函式庫合併成一個二進位檔。 每個函式庫的存在目的是將你的二進位檔限制在特定的 API 表面,而連結第二個函式庫則可以綁定到該表面之外的 API。
在函式庫與其 API 集合變體之間做選擇
對於兩個變體都涵蓋的 API,兩者在執行時會達到相同的實作。 不同的是,匯入表中最後出現的名稱,也就是該二進位檔能在 Windows 版本上運行的範圍。
- 當你需要一個同時能在相關 API 集尚未出現之前發行的 Windows 版本上執行的單一二進位檔時,就連結這個純函式庫(
OneCore.lib,OneCoreUAP.lib)。 它匯入舊有的 Windows 模組名稱,並透過反向轉發將這些匯入重新導向到不再包含原始模組的版本。 - 當您的二進位檔以目前版本的 Windows 為目標時,請連結 API 集合變體 (
OneCore_apiset.lib,OneCoreUAP_apiset.lib)。 它偏好在 API 可用時使用一個 API 集合名稱,因此匯入直接解析到承載實作的二進位檔,中間沒有轉發器。 這是更有效率的形式。 若沒有 API 集合名稱,則使用模組名稱,與普通函式庫相同。
這兩種選擇都不會改變你可以呼叫哪些 API。 它改變了你的匯入名稱,以及二進位檔能追溯到多遠。