> ## 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.

# Obtenir les succès gérés par le titre

> Exemple de code XSAPI pour récupérer la liste des succès XBOX Live gérés par le titre d'un joueur, parcourir les pages de résultats et obtenir un succès unique par ID.

Cette rubrique couvre les points suivants :

* [Obtenir la liste des succès](#getting-the-achievements-list)
* [Obtenir la page suivante des résultats de succès](#getting-the-next-page-of-achievements-results)
* [Obtenir un succès unique](#getting-a-single-achievement)

## Obtenir la liste des succès

Pour obtenir les succès du titre en cours d'exécution, appelez [XblAchievementsGetAchievementsForTitleIdAsync](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsgetachievementsfortitleidasync), comme suit.

### Appel de XblAchievementsGetAchievementsForTitleIdAsync

**C++**

```cpp theme={null}
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->context = nullptr;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of XAsyncBlock*.

    XblAchievementsResultHandle resultHandle;
    auto hr = XblAchievementsGetAchievementsForTitleIdResult(asyncBlock, &resultHandle);

    if (SUCCEEDED(hr))
    {
        const XblAchievement* achievements = nullptr;
        size_t achievementsCount = 0;
        hr = XblAchievementsResultGetAchievements(resultHandle, &achievements, &achievementsCount);

        for (size_t i = 0; i < achievementsCount; i++)
        {
            LogToScreen("Achievement %s: %s = %s", 
                achievements[i].id, 
                achievements[i].name,
                (achievements[i].progressState == XblAchievementProgressState::Achieved) ? "Achieved" : "Not achieved");
        }

        XblAchievementsResultCloseHandle(resultHandle); // When you're done with the handle, close it.
        achievements = nullptr; // Clear the array after calling XblAchievementsResultCloseHandle to the pointer to freed memory.
        // Instead, you couldn't close the handle and store it. Then, 
        // if you needed to copy the handle, call XblAchievementsResultDuplicateHandle().
    }
};

HRESULT hr = XblAchievementsGetAchievementsForTitleIdAsync(
    xboxLiveContext,
    xboxUserId,
    titleId,
    achievementType,
    unlockedOnly,
    orderBy,
    skipItems,
    maxItems,
    asyncBlock.get()
);
if (SUCCEEDED(hr))
{
    // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* because the callback will take over ownership.
    // If the call fails, std::unique_ptr will keep ownership and delete XAsyncBlock*.
    asyncBlock.release(); 
}
```

Pour plus d'informations, consultez les rubriques suivantes :

* [XAsyncBlock](/fr-CA/reference/system/xasync/structs/xasyncblock)
* [XblAchievement](/fr-CA/reference/live/xsapi-c/achievements_c/structs/xblachievement)
* [XblAchievementProgressState](/fr-CA/reference/live/xsapi-c/achievements_c/enums/xblachievementprogressstate)
* [XblAchievementsGetAchievementsForTitleIdAsync](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsgetachievementsfortitleidasync)
* [XblAchievementsGetAchievementsForTitleIdResult](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsgetachievementsfortitleidresult)
* [XblAchievementsResultCloseHandle](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsresultclosehandle)
* [XblAchievementsResultDuplicateHandle](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsresultduplicatehandle)
* [XblAchievementsResultGetAchievements](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsresultgetachievements)

[Retour en haut de cette rubrique.](#top)

## Obtenir la page suivante des résultats de succès

Il peut y avoir d'autres pages de succès. Pour le vérifier, appelez [XblAchievementsResultHasNext](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsresulthasnext), puis [XblAchievementsResultGetNextAsync](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsresultgetnextasync).

### Appel de XblAchievementsResultHasNext

**API C plate**

```cpp theme={null}
HRESULT hr = S_OK;
bool hasNext = false;
if (achievementsResult != nullptr)
{
    hr = XblAchievementsResultHasNext(achievementsResult, &hasNext);
}
```

Pour plus d'informations, consultez [XblAchievementsResultHasNext](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsresulthasnext).

### Appel de XblAchievementsResultGetNextAsync

Pour obtenir la page suivante de succès, appelez [XblAchievementsResultGetNextAsync](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsresultgetnextasync), comme suit.

**C++**

```cpp theme={null}
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->context = nullptr;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of XAsyncBlock*.
    XblAchievementsResultHandle resultHandle;
    auto hr = XblAchievementsResultGetNextResult(asyncBlock, &resultHandle);

    if (SUCCEEDED(hr))
    {
        const XblAchievement* achievements = nullptr;
        size_t achievementsCount = 0;
        hr = XblAchievementsResultGetAchievements(resultHandle, &achievements, &achievementsCount);

        for (size_t i = 0; i < achievementsCount; i++)
        {
            LogToScreen("Achievement %s: %s = %s",
                achievements[i].id,
                achievements[i].name,
                (achievements[i].progressState == XblAchievementProgressState::Achieved) ? "Achieved" : "Not achieved");
        }

        XblAchievementsResultCloseHandle(resultHandle); // When you're done with the handle, close it.
        achievements = nullptr; // Clear the array after calling XblAchievementsResultCloseHandle to the pointer to freed memory.
    }
};

HRESULT hr = XblAchievementsResultGetNextAsync(
    achievementsResult,
    maxItems,
    asyncBlock.get()
);
if (SUCCEEDED(hr))
{
    // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* because the callback will take over ownership.
    // If the call fails, std::unique_ptr will keep ownership and delete XAsyncBlock*.
    asyncBlock.release();
}
```

Pour plus d'informations, consultez les rubriques suivantes :

* [XAsyncBlock](/fr-CA/reference/system/xasync/structs/xasyncblock)
* [XblAchievement](/fr-CA/reference/live/xsapi-c/achievements_c/structs/xblachievement)
* [XblAchievementProgressState](/fr-CA/reference/live/xsapi-c/achievements_c/enums/xblachievementprogressstate)
* [XblAchievementsResultCloseHandle](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsresultclosehandle)
* [XblAchievementsResultGetAchievements](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsresultgetachievements)
* [XblAchievementsResultGetNextAsync](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsresultgetnextasync)
* [XblAchievementsResultGetNextResult](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsresultgetnextresult)

[Retour en haut de cette rubrique.](#top)

## Obtenir un succès unique

Pour obtenir un succès unique, appelez [XblAchievementsGetAchievementAsync](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsgetachievementasync), comme suit.

**API C plate**

```cpp theme={null}
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->context = nullptr;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of XAsyncBlock*.
    XblAchievementsResultHandle resultHandle;
    auto hr = XblAchievementsGetAchievementResult(asyncBlock, &resultHandle);

    if (SUCCEEDED(hr))
    {
        const XblAchievement* achievements = nullptr;
        size_t achievementsCount = 0;
        hr = XblAchievementsResultGetAchievements( resultHandle, &achievements, &achievementsCount );

        // Use the achievements array to read the achievement data.

        XblAchievementsResultCloseHandle(resultHandle); // When you're done with the handle, close it.
        achievements = nullptr; // Clear the array after calling XblAchievementsResultCloseHandle to avoid the pointer to freed memory.
    }
};

HRESULT hr = XblAchievementsGetAchievementAsync(
    xboxLiveContext,
    xboxUserId,
    scid,
    achievementId.c_str(),
    asyncBlock.get()
);
if (SUCCEEDED(hr))
{
    // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* because the callback will take over ownership.
    // If the call fails, std::unique_ptr will keep ownership and delete XAsyncBlock*.
    asyncBlock.release();
}
```

Pour plus d'informations, consultez les rubriques suivantes :

* [XAsyncBlock](/fr-CA/reference/system/xasync/structs/xasyncblock)
* [XblAchievement](/fr-CA/reference/live/xsapi-c/achievements_c/structs/xblachievement)
* [XblAchievementsGetAchievementAsync](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsgetachievementasync)
* [XblAchievementsGetAchievementResult](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsgetachievementresult)
* [XblAchievementsResultCloseHandle](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsresultclosehandle)
* [XblAchievementsResultGetAchievements](/fr-CA/reference/live/xsapi-c/achievements_c/functions/xblachievementsresultgetachievements)

[Retour en haut de cette rubrique.](#top)


## Related topics

- [Exemple de code pour les succès gérés par le titre (contenu)](/fr-CA/services/xbox-services/player-data/achievements/title-managed/how-to/live-achievements-howto-nav.md)
- [Obtenir les succès basés sur les événements](/fr-CA/services/xbox-services/player-data/achievements/event-based/how-to/live-getting-event-based-achievements.md)
- [Données des joueurs](/fr-CA/services/xbox-services/player-data/achievements/title-managed/how-to/index.md)
- [Succès gérés par le titre (contenu)](/fr-CA/services/xbox-services/player-data/achievements/title-managed/live-achievements-tm-nav.md)
- [Succès basés sur les événements et succès gérés par le titre](/fr-CA/services/xbox-services/player-data/achievements/live-achievements-eb-vs-tm.md)
