Microsoft Game Development Kit on Xbox のプリプロセッサの定義

この記事では、Xbox 上の Microsoft Game Development Kit (GDK) に固有のプリプロセッサ定義をリストします。

プリプロセッサ定義

説明

_GAMING_XBOX Xbox One または Xbox Series X|S の公式定義。
#ifdef _GAMING_XBOX
          // Microsoft Game Development Kit (GDK) on Xbox.
          ...
        
_GAMING_XBOX_XBOXONE 定義は、Xbox One 上の GDK のコンパイルを示します。
_GAMING_XBOX_SCARLETT 定義は、Xbox Series X|S 上の GDK のビルドを示します。
_GAMING_DESKTOP 定義は、GDK を使用して PC 上のビルドを示します。
_M_X64、_M_IX86、_M_ARM64、_M_ARM プラットフォームではなくプロセッサ アーキテクチャに固有のコードを作成する場合は、これらの定義を使用する必要があります。 Xbox 360 の場合、同等の定義は_M_PPCBE です。 _M_AMD64 は _M_X64 のエイリアスであり、オリジナル名でした。 _M_X64 に替わって段階的に廃止されることになっています。 _X86_ や _AMD64_ など、Windows レガシ定義を使用しないでください。
WINAPI_FAMILY Microsoft プラットフォームのヘッダーでは、winapifamily.h で定義された Windows ファミリーとパーティション マクロを多用しています。 これらのパーティションは変更される可能性があるので (実際に Windows 8.0 SDK と Windows 8.1 SDK の間で変更されています) 注意が必要です。 また、時間の経過とともに追加される新しい PARTITION 値および FAMILY 値もあります。 決してクライアント コードでは PARTITION 値、WINAPI_FAMILY_PARTITION マクロ、または WINAPI_FAMILY_ONE_PARTITION マクロを直接使用しないでください。 クライアント コードでは WINAPI_FAMILY の特定の値を探すようにした方が妥当です。 Windows 8.1 SDK バージョンの winapifamily.h には、この用途に対応する拡張されたコメント ブロックがあります。

Xbox コード上の Microsoft Game Development Kit (GDK) に次のプリプロセッサ定義を使用します。

#ifdef _GAMING_XBOX
// GDK on Xbox
#ifdef _GAMING_XBOX_SCARLETT
// Xbox Series X|S hardware
#elif _GAMING_XBOX_ONE
// Xbox One hardware

Microsoft Game Development Kit (GDK) を使用してビルドした場合、Visual Studio 統合開発環境 (IDE) の Microsoft ビルド ルールは、自動的に _GAMING_XBOXWINAPI_FAMILY=WINAPI_FAMILY_GAMES を定義します。 Visual Studio IDE を使用して Microsoft Game Development Kit (GDK) に対してビルドしない開発者は、これらの値をコンパイラのコマンドラインに指定する必要があります。

Gaming.Xbox.XboxOne.x64

/D_GAMING_XBOX /D_GAMING_XBOX_XBOXONE /DWINAPI_FAMILY=WINAPI_FAMILY_GAMES  

Gaming.Xbox.Scarlett.x64

/D_GAMING_XBOX /D_GAMING_XBOX_SCARLETT /DWINAPI_FAMILY=WINAPI_FAMILY_GAMES  

Gaming.Desktop.x64

/D_GAMING_DESKTOP /DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP

これらの定義は、Microsoft Game Development Kit を使用する場合の 'クラシック' x64 プラットフォームにも適用されます。

Microsoft クロスプラットフォーム コードを記述するときは、次の構造を使用できます。

    #if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)
    // This code is for Win32 desktop apps.
    #elif WINAPI_FAMILY == WINAPI_FAMILY_GAMES
    // This code is for the Microsoft Game Development Kit (GDK) (could also use _GAMING_XBOX if only targeting Xbox).
    #elif WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
    // This code is for Windows phone 8.x.
    #elif WINAPI_FAMILY == WINAPI_FAMILY_APP
    // This code is for Microsoft Store apps for 8.x.
    #elif WINAPI_FAMILY == WINAPI_FAMILY_TV_TITLE
    // This code is for Xbox One Game OS/XDK.
    #elif WINAPI_FAMILY == WINAPI_FAMILY_TV_APP
    // This code is for Xbox One System OS/ADK.
    #else
    #error Unknown WINAPI_FAMILY value
    #endif