> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# カスタム C/C++ エンジンに GDK を統合する

> GDK、Gaming Runtime Services (GRTS)、XSAPI を GDK ビルトイン サポートのない C/C++ エンジンに統合し、PC と XBOX の Microsoft Store で出荷します。

このトピックは、PC 上の Microsoft Store にゲームを公開する準備を進めている、かつ GDK のビルトイン サポートがない C/C++ ベースのエンジンを使用している場合に利用してください。

* [Partner Center でプロダクトを作成する](#creating-a-product-in-partner-center)
* [GDK を C/C++ ゲームに統合する](#integrating-the-gdk-into-c-c-games)
* [ゲームで XBOX services をテストする](#testing-xbox-services-in-your-game)
* [公開](#publishing)

## Partner Center でプロダクトを作成する

Microsoft Store にゲームを公開する前に、Partner Center で XBOX services を有効にしたプロダクトを作成する必要があります。Partner Center の詳細については、[Setting up an app or game in Partner Center, for Managed Partners](https://learn.microsoft.com/gaming/gdk/_content/gc/services/fundamentals/portal-config/live-setup-partner-center-partners) を参照してください。

## GDK を C/C++ ゲームに統合する

C/C++ ゲームに GDK を統合するには、ゲームには次の 4 つが必要です。

1. API のシグネチャとデータ構造を記述する GDK および XBOX Services API (XSAPI) の *ヘッダー*。
2. GDK のエクスポートされた関数への外部参照をリンカーが解決できるようにする *インポート ライブラリ*。
3. XSAPI DLL のエクスポートされた関数への外部参照をリンカーが解決できるようにする XSAPI 静的ライブラリまたは *インポート ライブラリ*。
   * XSAPI は静的な形と動的な形の両方で利用できます。詳細については以下の表を参照し、静的または動的のいずれかを選択してください。
4. GDK および XSAPI 関数の実行時実装を実際に含む *ダイナミック リンク ライブラリ*（XSAPI の動的版を利用する場合）。

不可欠な XBOX エコシステム体験と統合するために、ゲームは 2 つのコンポーネント — Gaming Runtime Services (GRTS) と XSAPI — と対話する必要があります。マネージドではないゲームで必要となるファイルは次のとおりです。

| コンポーネント          | GRTS (動的のみ)                                                 | XSAPI (動的)                                                            | XSAPI (静的)                                            |
| ---------------- | ----------------------------------------------------------- | --------------------------------------------------------------------- | ----------------------------------------------------- |
| ヘッダー             | GRTS ヘッダー: XUser、XGameSave、XGameUI など（GDK より）               | XSAPI ヘッダー: profile\_c.h、achievements\_c.h など（GDK より）                 | XSAPI ヘッダー: profile\_c.h、achievements\_c.h など（GDK より） |
| インポート ライブラリ      | xgameruntime.lib（GDK より）                                    | Microsoft.Xbox.Services.GDK.C.Thunks.lib（GDK より）                      | Microsoft.Xbox.Services.142.GDK.C.lib（GDK より）         |
| ダイナミック リンク ライブラリ | xgameruntime.dll といくつかの dll（GRTS によって system32 にインストールされます） | Microsoft.Xbox.Services.GDK.C.Thunks.dll（GDK より、ゲーム パッケージに含める必要があります） | 不要                                                    |

<Note>
  複数の DLL に機能が分散しているプラグイン ベースのアーキテクチャを採用しているゲームでは、`Thunks.dll` を使用して XSAPI を統合することを推奨し、サポートしています。この方法は PC と XBOX プラットフォームの両方で信頼性を持って動作します。

  XSAPI を複数の DLL に静的にリンクすると、各 DLL がグローバル状態のコピーを個別に維持します。その結果、1 つの DLL で `XblInitialize` を呼び出しても、他の DLL では XSAPI が初期化されません。個別の静的インスタンスを持つ DLL 間で XSAPI ハンドルを共有すると、クラッシュや予期しない挙動につながる可能性があります。

  `Thunks.dll` は XSAPI とその状態の単一の共有インスタンスを提供することで、この問題を解決します。これにより重複が回避され、すべての DLL で一貫した動作が保証されます。

  技術的には XSAPI を 1 つの DLL に静的にリンクしてシンボルをエクスポートすることも可能ですが、この方法はより複雑でエラーが起きやすくなります。`Thunks.dll` の使用はよりシンプルで安全であり、完全にサポートされています。
</Note>

### Gaming Runtime Services と XSAPI の要件をプロジェクトに追加する

以下の手順は、Gaming Runtime Services と XSAPI を使用するためのすべての要件をプロジェクトが満たすようにするために必要な変更をまとめたものです。

1. x64 をターゲットにしていることを確認してください。Visual Studio では **Build** -> **Configuration Manager** で **Active solution platform** を x64 に設定します。
2. 次のインクルード パスを追加します: `C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\GameKit\Include` `C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.Services.API.C\Include` `C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.LibHttpClient\Include` **GDK version number** は、リリースの年、月、サブバージョン番号でディレクトリ名になります。たとえば June 2022 GDK ならディレクトリ名は 220600 です。Microsoft GDK (June 2024) 以前では、*C:\Program Files (x86)\Microsoft GDK\\\[GDK version number]\GRDK\ExtensionLibraries\Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Include* と *C:\Program Files (x86)\Microsoft GDK\\\[GDK version number]\GRDK\ExtensionLibraries\Xbox.LibHttpClient\DesignTime\CommonConfiguration\Neutral\Include* を使用してください。Visual Studio では、プロジェクトのプロパティ ページの **Configuration Properties** -> **VC++ Directories** -> **Include Directories** でこれらのパスを追加します。
3. インポート ライブラリ用に次のライブラリ パスを追加します: `C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\GameKit\Lib\amd64` `C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.Services.API.C\Lib\x64\Release` `C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.LibHttpClient\Lib\x64` **GDK version number** は、リリースの年、月、サブバージョン番号でディレクトリ名になります。たとえば June 2022 GDK ならディレクトリ名は 220600 です。Microsoft GDK (June 2024) 以前では、*C:\Program Files (x86)\Microsoft GDK\\\[GDK version number]\GRDK\ExtensionLibraries\Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\Release* と *C:\Program Files (x86)\Microsoft GDK\\\[GDK version number]\GRDK\ExtensionLibraries\Xbox.LibHttpClient\DesignTime\CommonConfiguration\Neutral\Lib* を使用してください。Visual Studio では、プロジェクトのプロパティ ページの **Configuration Properties** -> **VC++ Directories** -> **Library Directories** でこれらのパスを追加します。
4. プロジェクトにリンクされるライブラリのリストに次のライブラリを追加します: `C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\GameKit\Lib\amd64\xgameruntime.lib` `C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.Services.API.C\Lib\x64\Release\Microsoft.Xbox.Services.GDK.C.Thunks.lib (または静的にリンクする場合は Microsoft.Xbox.Services.142.GDK.C.lib)` `C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.LibHttpClient\Lib\x64\libHttpClient.GDK.lib` **GDK version number** は、リリースの年、月、サブバージョン番号でディレクトリ名になります。たとえば June 2022 GDK ならディレクトリ名は 220600 です。Microsoft GDK (June 2024) 以前では、*C:\Program Files (x86)\Microsoft GDK\\\[GDK version number]\GRDK\ExtensionLibraries\Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\Release\Microsoft.Xbox.Services.GDK.C.Thunks.lib (または静的にリンクする場合は Microsoft.Xbox.Services.142.GDK.C.lib)* と *C:\Program Files (x86)\Microsoft GDK\\\[GDK version number]\GRDK\ExtensionLibraries\Xbox.LibHttpClient\DesignTime\CommonConfiguration\Neutral\Lib\libHttpClient.GDK.lib* を使用してください。Visual Studio では、プロジェクトのプロパティ ページの **Configuration Properties** -> **Linker** -> **Input** -> **Additional Dependencies** でライブラリを追加します。
5. *\_GAMING\_DESKTOP* と *WINAPI\_FAMILY=WINAPI\_FAMILY\_DESKTOP\_APP* を定義します。Visual Studio では、プロジェクトのプロパティ ページの **C/C++** -> **Command Line** -> **Additional Options** に次の行を追加します: `/D "_GAMING_DESKTOP" /D "WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP"`
6. MicrosoftGame.config ファイルを作成し、ビルド時に .exe と同じ場所にコピーされるようにしてください。**注意:** エンジンが実行時に異なる .exe を使用するエディター内実行機能をサポートしている場合、MicrosoftGame.config が該当する .exe と同じディレクトリにもコピーされるようにする必要があります。MicrosoftGame.config が .exe と同じディレクトリにない場合、エディター内実行機能を使用するときに XBOX services が動作しません。開発の開始には、次の例のようなデフォルト値の config を使用できます。Identity Name、Executable Name、Executable Alias の値はすべて実行ファイルの名前に置き換えてください。
   ```xml theme={null}
   <?xml version="1.0" encoding="utf-8"?>
   <Game configVersion="1">
   <Identity Name="Direct3DGame1_test"
               Publisher="CN=Publisher"
               Version="1.0.0.0"/>
   <ExecutableList>
       <Executable Name="Direct3DGame1_test.exe"
                   Id="Game"
                   Alias="Direct3DGame1_test.exe"/>
   </ExecutableList>
   <ShellVisuals DefaultDisplayName="Direct3DGame1_test"
                   PublisherDisplayName="PublisherName"
                   Square480x480Logo="LargeLogo.png"
                   Square150x150Logo="GraphicsLogo.png"
                   Square44x44Logo="SmallLogo.png"
                   Description="Direct3DGame1_test"
                   ForegroundText="light"
                   BackgroundColor="#000040"
                   SplashScreenImage="SplashScreen.png"
                   StoreLogo="StoreLogo.png"/>
   </Game>
   ```
7. **Microsoft.Xbox.Services.GDK.C.Thunks.dll**（動的にリンクする場合）、**XCurl.dll**、**libHttpClient.GDK.dll** のコピーが、ビルド時に .exe と同じ場所にコピーされることを確認してください。**注意:** エンジンが実行時に異なる .exe を使用するエディター内実行機能をサポートしている場合、その .exe もこれらの .dll を参照するようにする必要があります。.exe から .dll が参照されないと、エディター内実行機能を使用するときに XBOX services が動作しません。XSAPI に動的にリンクする場合、**Microsoft.Xbox.Services.GDK.C.Thunks.dll** は GDK インストールの次のディレクトリにあります: `C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.Services.API.C\Lib\x64\[Debug|Release]` **XCurl.dll** は GDK インストールの次のディレクトリにあります: `C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.XCurl.API\Redist\x64` **libHttpClient.GDK.dll** は GDK インストールの次のディレクトリにあります: `C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.LibHttpClient\Redist\x64` **GDK version number** は、リリースの年、月、サブバージョン番号でディレクトリ名になります。たとえば June 2022 GDK ならディレクトリ名は 220600 です。Microsoft GDK (June 2024) 以前では、*C:\Program Files (x86)\Microsoft GDK\\\[GDK version number]\GRDK\ExtensionLibraries\Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\\\[Debug|Release]*、*C:\Program Files (x86)\Microsoft GDK\\\[GDK version number]\GRDK\ExtensionLibraries\Xbox.XCurl.API\Redist\CommonConfiguration\neutral*、および *C:\Program Files (x86)\Microsoft GDK\\\[GDK version number]\GRDK\ExtensionLibraries\Xbox.LibHttpClient\Redist\CommonConfiguration\neutral* を使用してください。

<Note>
  あるいは、既存の Visual Studio Desktop プロジェクトに GDK を統合する場合は、このトピックの手順に従ってプロジェクトを GDK プロジェクトに変換できます: [Adding the Microsoft Game Development Kit to an existing desktop project](https://learn.microsoft.com/gaming/gdk/_content/gc/gdk-dev/pc-dev/overviews/gr-add-to-existing-project)。
</Note>

### MicrosoftGame.config を更新する

前の手順で作成した MicrosoftGame.config ファイルは、Gaming Runtime、Microsoft Store、およびタイトル アイデンティティの機能を使用するまでは追加の設定なしに PC と XBOX 上での初期開発が可能なデフォルト値を持っています。XBOX services 機能を使用するには、Partner Center プロジェクトのアイデンティティ詳細でプロジェクトの MicrosoftGame.config を更新する必要があります。

1. [Partner Center dashboard](https://partner.microsoft.com/dashboard/windows/overview) に移動します。
2. プロダクトのリストからゲームを選択します。
3. **Game setup** タブを選択し、次に **Identity details** を選択します。
4. **Show Details** を選択して **Identity details** セクションを展開します。
5. **Identity details** セクションの表から次の値を使用し、それらの値を Partner Center から MicrosoftGame.config の対応する要素とフィールドにコピーします。

| Partner Center 上の名前                        | MicrosoftGame.config |
| ------------------------------------------ | -------------------- |
| XBOX Title ID                              | TitleId              |
| Package/Identity/Name                      | Identity->Name       |
| Package/Identity/Publisher                 | Identity->Publisher  |
| XBOX services -> XBOX Settings -> MSAAppId | MSAAppId             |

たとえば、Partner Center 上の次のアイデンティティ詳細は、以下のサンプルのような MicrosoftGame.config になります。

| Partner Center 上の名前                        | 例の値                                     |
| ------------------------------------------ | --------------------------------------- |
| XBOX Title ID                              | 64353034                                |
| Package/Identity/Name                      | 41336MicrosoftATG.Achievements2017Redux |
| Package/Identity/Publisher                 | CN=A4954634-DF4B-47C7-AB70-D3215D246AF1 |
| XBOX services -> XBOX Settings -> MSAAppId | 0000000000000000                        |

```xml theme={null}
<?xml version="1.0" encoding="utf-8"?>
<Game configVersion="1">

  <Identity Name='41336MicrosoftATG.Achievements2017Redux' Version="1.1.0.0" Publisher='CN=A4954634-DF4B-47C7-AB70-D3215D246AF1' />


  <TitleId>64353034</TitleId>
  <MSAAppId>0000000000000000</MSAAppId>

  <ExecutableList>
    <Executable Name="Achievements2017_desktop.exe"
                TargetDeviceFamily="PC"
                Id="Game"/>
  </ExecutableList>

  <ShellVisuals DefaultDisplayName="Achievements2017 Desktop Sample"
                PublisherDisplayName="Xbox Advanced Technology Group"
                StoreLogo="Assets\StoreLogo.png"
                Square150x150Logo="Assets\Logo.png"
                Square44x44Logo="Assets\SmallLogo.png"
                Square480x480Logo="Assets\LargeLogo.png"
                Description="Achievements2017"
                ForegroundText="dark"
                BackgroundColor="#000000"
                SplashScreenImage="Assets\SplashScreen.png"/>
</Game>
```

MicrosoftGame.config の値の詳細については、[MicrosoftGame.config overview](https://learn.microsoft.com/gaming/gdk/_content/gc/features/common/game-config/MicrosoftGameConfig-Overview) を参照してください。

### ゲーム ランタイムと XSAPI を初期化する

以下の手順は、ゲームで Gaming Runtime Services と XSAPI を初期化する方法を示しています。

1. XGameRuntime ヘッダーと XSAPI services-c ヘッダーをインクルードします。
   ```cpp theme={null}
   #include <XGameRuntime.h>
   #include <xsapi-c/services_c.h>
   ```
2. [XGameRuntimeInitialize](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xgameruntimeinit/functions/xgameruntimeinitialize) を呼び出して GDK ランタイムを初期化します。
   ```cpp theme={null}
   // Initialize the GameRuntime
   HRESULT hr = XGameRuntimeInitialize();
   if (FAILED(hr))
   {
       if (hr == E_GAMERUNTIME_DLL_NOT_FOUND || hr == E_GAMERUNTIME_VERSION_MISMATCH)
       {
           (void)MessageBoxW(nullptr, L"Game Runtime is not installed on this system or needs updating.", g_szAppName, MB_ICONERROR | MB_OK);
       }
       return 1;
   }
   ```
3. [XblInitialize](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/live/xsapi-c/xbox_live_global_c/functions/xblinitialize) を呼び出して XSAPI を初期化します。
   ```cpp theme={null}
    XblInitArgs xblArgs = {};
    //xblArgs.queue = queue; // 独自の XTaskQueue を作成した場合は、この行のコメントを外してください。それ以外の場合、デフォルトではこの行は不要です。
    xblArgs.scid = "00000000-0000-0000-0000-000000000000"; // Partner Center プロジェクトの scid をここに追加してください;
    HRESULT hr = XblInitialize(&xblArgs);
    if (FAILED(hr))
    {
        // 失敗を処理する
    }
   ```

### ゲーム ランタイムを解放する

Gaming Runtime Services は、ゲーム終了前に解放する必要があります。XSAPI は終了前に明示的にクリーンアップする必要はありません。

[XGameRuntimeUninitialize](https://learn.microsoft.com/gaming/gdk/_content/gc/reference/system/xgameruntimeinit/functions/xgameruntimeuninitialize) を呼び出して GDK ランタイムを解放します。

```cpp theme={null}
 // 他のすべてのアクティビティが完了した後で
 // Gaming Runtime を解放する。
 XGameRuntimeUninitialize();
```

ゲームで XSAPI を使用する詳細な概要については [Getting started with XBOX services APIs](https://learn.microsoft.com/gaming/gdk/_content/gc/services/fundamentals/xbox-services-api/live-gs-xbl-apis) を参照してください。<br />GDK 機能の実装の概要については [Game Development Kit (GDK) features](https://learn.microsoft.com/gaming/gdk/_content/gc/features/features-index) を参照してください。

## ゲームで XBOX services をテストする

実績などのゲーム内 XBOX services 機能をテストするには、サンドボックスと、そのサンドボックスへのアクセスを持つテスト アカウントを使用する必要があります。

### テスト アカウントを作成する

ゲーム内の XBOX services 機能をテストするには、開発サンドボックスへのアクセスを持つテスト アカウントを作成する必要があります。テスト アカウントの作成については、[Creating test accounts](https://learn.microsoft.com/gaming/gdk/_content/gc/services/develop/test-accounts/live-setup-testaccounts) を参照してください。

### サンドボックスを切り替える

テスト アカウントを作成したら、次の手順でサンドボックスにアクセスします。

1. サンドボックス ID を確認するには、[Partner Center](https://partner.microsoft.com/dashboard/windows/overview) に移動します。
2. **XBOX services** を選択し、次に **Gameplay Settings** を選択します。
   <Note>
     サンドボックス ID は最初のタブにあり、「ABCDEF.0」のような名前になっています。
   </Note>
3. **Start** メニューを開きます。
4. **Microsoft GDK Command Prompts** と入力し、キーボードの **Enter** を選択します。
5. 最初のコマンド プロンプトを開きます。
6. コマンド プロンプトで **XblPCSandbox.exe \[サンドボックス ID]** と入力します。
7. コマンド プロンプトがいくつかのアプリを起動したら、XBOX アプリにテスト アカウントでサインインします。

正常にサインインできれば、テスト アカウントを作成し、サンドボックスを切り替えてテストを開始する準備が整ったことになります。

サンドボックスの詳細については、[XBOX services Sandboxes overview](https://learn.microsoft.com/gaming/gdk/_content/gc/services/fundamentals/sandboxes/live-setup-sandbox) を参照してください。

## 公開

ゲームを公開する準備を整えるには、次のことが必要です。

* ゲームと GDK の統合を完了していること
* [Getting started with packaging titles for a PC by using the MSIXVC packaging tools](https://learn.microsoft.com/gaming/gdk/_content/gc/features/common/packaging/overviews/packaging-getting-started-for-PC) の手順に従ってゲーム パッケージを作成していること

これら 2 つの要件を満たしたら、公開の準備が整いました。ゲームを送信するには、[Partner Center](https://partner.microsoft.com/dashboard/windows/overview) にアクセスし、UI 内の指示に従ってください。


## Related topics

- [Godot & コミュニティエンジン 概要](/ja-jp/paths/community-engines/overview.md)
- [Unity、Unreal、その他のエンジンで GDK を使用する](/ja-jp/build/gdk-and-engines/gdk-and-engines.md)
- [PC エンド ツー エンド概要](/ja-jp/build/gdk-and-engines/overview.md)
- [PlayFab 一般サンプル](/ja-jp/services/playfab/resources/playfab-samples.md)
- [移植の概要](/ja-jp/paths/porting/overview.md)
