Vous devez appeler la fonction XUserCloseHandle une seule fois pour chaque XUserHandle que vous récupérez à partir d’une API XUser.
Vous pouvez également fermer tous les handles qui représentent l’utilisateur en appelant la fonction XUserCloseHandle.L’exemple suivant montre comment ajouter de manière asynchrone un utilisateur à une session de jeu.
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;}
En-tête : XUser.hBibliothèque : xgameruntime.libPlateformes prises en charge : Windows, Steam Deck, consoles de la famille XBOX One et consoles XBOX Series