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

# XUserAddResult

> XUserAddResult

# XUserAddResult

Récupère un handle vers un utilisateur créé par [XUserAddAsync](/fr/reference/system/xuser/functions/xuseraddasync).

## Syntaxe

```cpp theme={null}
HRESULT XUserAddResult(  
         XAsyncBlock* async,  
         XUserHandle* newUser  
)  
```

### Paramètres

*async*   \_Inout\_\
Type : [XAsyncBlock\*](/fr/reference/system/xasync/structs/xasyncblock)

Bloc asynchrone envoyé à [XUserAddAsync](/fr/reference/system/xuser/functions/xuseraddasync).

*newUser*   \_Out\_\
Type : XUserHandle\*

Contient un handle vers le nouvel utilisateur.

### Valeur de retour

Type : HRESULT

Code de réussite ou d'erreur HRESULT.

| Code de retour | Description |
| - | - |
| S\_OK | L'opération a réussi. |
| E\_GAMEUSER\_NO\_DEFAULT\_USER | Aucun utilisateur par défaut n'est disponible. [XUserAddAsync](/fr/reference/system/xuser/functions/xuseraddasync) doit être appelé sans [XUserAddOptions::AddDefaultUserSilently](/fr/reference/system/xuser/enums/xuseraddoptions). |
| E\_GAMEUSER\_RESOLVE\_USER\_ISSUE\_REQUIRED | L'utilisateur doit utiliser une interface utilisateur pour résoudre le problème. Appelez [XUserResolveIssueWithUiAsync](/fr/reference/system/xuser/functions/xuserresolveissuewithuiasync) pour afficher l'interface utilisateur à l'utilisateur. |
| E\_ABORT | L'utilisateur a annulé l'opération. |

## Remarques

**XUserAddAsync** démarre une opération asynchrone pour ajouter un utilisateur au jeu. Utilisez
[XUserAddResult](/fr/reference/system/xuser/functions/xuseraddresult) pour récupérer les résultats de l'opération.

**XUserAddAsync** affiche toujours une interface utilisateur de sélection de compte, sauf si vous passez
[XUserAddOptions::AddDefaultUserSilently](/fr/reference/system/xuser/enums/xuseraddoptions)
au paramètre *options*.

Si vous utilisez [XUserAddOptions::AddDefaultUserSilently](/fr/reference/system/xuser/enums/xuseraddoptions), **XUserAddAsync** n'affiche pas
d'interface utilisateur. L'utilisateur retourné par **XUserAddOptions::AddDefaultUserSilently** continue d'être retourné jusqu'à ce que l'utilisateur
se déconnecte. Si aucun utilisateur par défaut n'est disponible, [XUserAddResult](/fr/reference/system/xuser/functions/xuseraddresult) retourne
**E\_GAMEUSER\_NO\_DEFAULT\_USER**. Cela indique que vous devez appeler **XUserAddAsync** sans
**XUserAddOptions::AddDefaultUserSilently** pour sélectionner un utilisateur.

Si un utilisateur est exclu de XBOX Live, le jeu ne pourra pas obtenir de XUserHandle pour cet utilisateur.
Si **XUserAddOptions::AddDefaultUserSilently** est utilisé et que le jeu a été lancé par un utilisateur exclu,
**XUserAddResult** retourne E\_GAMEUSER\_NO\_DEFAULT\_USER. Sinon, si une interface utilisateur est affichée, soit un utilisateur non exclu
devra se connecter, soit l'utilisateur devra annuler l'interface utilisateur, auquel cas **XUserAddResult**
retournera E\_ABORT.

Vous ne pouvez pas utiliser [XUserAddOptions::AllowGuests](/fr/reference/system/xuser/enums/xuseraddoptions) avec **XUserAddOptions::AddDefaultUserSilently**. Un invité
ne peut pas être l'utilisateur par défaut. Vous pouvez utiliser **XUserAddOptions::AllowGuests** en toute sécurité, que la plateforme actuelle
prenne en charge les invités ou non.

Vous devez fermer une fois chaque handle **XUserHandle** que vous récupérez à partir d'une API **XUsers** en appelant
[XUserCloseHandle](/fr/reference/system/xuser/functions/xuserclosehandle).

L'exemple suivant montre comment ajouter de façon asynchrone un utilisateur à une session de jeu.

```cpp theme={null}
HRESULT AddUserComplete(XAsyncBlock* ab)
{
    unique_user_handle user;
    RETURN_IF_FAILED(XUserAddResult(ab, &user));

    XUserLocalId userLocalId;
    XUserGetLocalId(user.get(), &userLocalId);

    auto iter = std::find_if(
        _users.begin(),
        _users.end(),
        [&userLocalId](const User& candidate)
    {
        XUserLocalId candidateUserLocalId;
        XUserGetLocalId(candidate.Handle(), &candidateUserLocalId);
        return candidateUserLocalId == userLocalId;
    });

    // User already known
    if (iter != _users.end())
    {
        appLog.AddLog("User already in list\n");
        return S_OK;
    }

    try
    {
        _users.emplace_back(user.get());
        _users.back().LoadGamerPicAsync(_queue);
    }
    CATCH_RETURN();

    return S_OK;
}

HRESULT AddUser(bool allowGuests, bool silent)
{
    auto asyncBlock = std::make_unique<XAsyncBlock>();
    ZeroMemory(asyncBlock.get(), sizeof(*asyncBlock));
    asyncBlock->queue = _queue;
    asyncBlock->context = this;
    asyncBlock->callback = [](XAsyncBlock* ab)
    {
        auto asyncBlock = std::unique_ptr<XAsyncBlock>(ab);
        LOG_IF_FAILED(static_cast<UserWindow*>(ab->context)->AddUserComplete(ab));
    };

    XUserAddOptions options = XUserAddOptions::None;

    if (allowGuests)
    {
        WI_SET_FLAG(options, XUserAddOptions::AllowGuests);
    }

    if (silent)
    {
        WI_SET_FLAG(options, XUserAddOptions::AddDefaultUserSilently);
    }

    if (SUCCEEDED_LOG(XUserAddAsync(
        options,
        asyncBlock.get())))
    {
        // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* since the callback will take over ownership.
        // If the call fails, the std::unique_ptr will keep ownership and delete the XAsyncBlock*
        asyncBlock.release();
    }

    return S_OK;
}
```

## Configuration requise

**En-tête :** XUser.h

**Bibliothèque :** xgameruntime.lib

**Plateformes prises en charge :** Windows, Steam Deck, consoles de la famille XBOX One et consoles XBOX Series

## Documentation conceptuelle

* [Exécuter une tâche d'API Microsoft Game Development Kit (GDK)](/fr/build/core-features/common/async/async-libraries/async-library-xasync-example-run-gdk-task)
* [Objectifs de conception et améliorations de la programmation asynchrone](/fr/build/core-features/common/async/async-whitepaper)

## Voir aussi

[XUser](/fr/reference/system/xuser/xuser_members)

[XUserAddAsync](/fr/reference/system/xuser/functions/xuseraddasync)

[XUserAddOptions](/fr/reference/system/xuser/enums/xuseraddoptions)

[XUserCloseHandle](/fr/reference/system/xuser/functions/xuserclosehandle)


## Related topics

- [XUserAddResult](/reference/system/xuser/functions/xuseraddresult.md)
- [XUserAddOptions](/reference/system/xuser/enums/xuseraddoptions.md)
