Windows アンブレラ ライブラリ

重要

このトピックの情報は、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で as-is を実行することは保証されません。
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で as-is を実行することは保証されません。

これらのライブラリのうち 2 つを 1 つのバイナリに結合しないでください。 バイナリを特定の API サーフェスに限定するためにそれぞれが存在し、2 つ目のライブラリをリンクすると、そのサーフェスの外部にある API にバインドできます。

ライブラリとその API セットバリアントの選択

両方のバリアントがカバーする API の場合、2 つのバリアントは実行時に同じ実装に到達します。 異なるのは、バイナリのインポートテーブルに記録される名前であり、その結果、そのバイナリが実行可能な Windows のバージョン範囲も変わります。

  • 関連する API セットが存在する前にリリースされたバージョンのWindowsでも実行される単一のバイナリが必要な場合は、プレーン ライブラリ (OneCore.lib、OneCoreUAP.lib) をリンクします。 従来のWindowsモジュール名がインポートされ、元のモジュールを含まないエディションでそれらのインポートが逆転送によってリダイレクトされます。
  • バイナリが現在のバージョンのWindowsをターゲットにしている場合は、API セットバリアント (OneCore_apiset.lib、OneCoreUAP_apiset.lib) をリンクします。 API セット名は、API に対して使用可能な場所を問わず優先されるため、インポートは実装をホストするバイナリに直接解決され、間にフォワーダーはありません。 それがより効率的な形式です。 API セット名が適用されない場合は、プレーン ライブラリと同じモジュール名が使用されます。

どちらの選択でも、呼び出すことができる API は変更できません。 インポートの名前付け方法と、バイナリを実行できる距離が変更されます。

こちらも参照ください