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

# XStoreQueryAddOnLicensesAsync

> XStoreQueryAddOnLicensesAsync

# XStoreQueryAddOnLicensesAsync

Énumère les licences de tous les modules complémentaires durables associés à une licence de jeu numérique.
Cela s'applique uniquement aux types Durable sans package et ne peut être utilisé qu'avec une licence numérique, et non avec des licences de disque.
L'exécution de cette fonction avec une licence de disque produit des résultats vides, même s'il existe des durables individuels que l'utilisateur possède ou pour lesquels il peut obtenir une licence.
Pour les scénarios avec disque, utilisez plutôt [XStoreAcquireLicenseForDurablesAsync](/fr/reference/system/xstore/functions/xstoreacquirelicensefordurablesasync).

## Syntaxe

```cpp theme={null}
HRESULT XStoreQueryAddOnLicensesAsync(  
         const XStoreContextHandle storeContextHandle,  
         XAsyncBlock* async  
)  
```

### Paramètres

*storeContextHandle*   \_In\_\
Type : XStoreContextHandle

Handle de contexte de Store de l'utilisateur, renvoyé par [XStoreCreateContext](/fr/reference/system/xstore/functions/xstorecreatecontext).

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

[XAsyncBlock](/fr/reference/system/xasync/structs/xasyncblock) définissant le travail asynchrone en cours.
Le [XAsyncBlock](/fr/reference/system/xasync/structs/xasyncblock) peut être utilisé pour interroger l'état de l'appel et récupérer ses résultats. Pour plus d'informations, consultez [XAsyncBlock](/fr/reference/system/xasync/structs/xasyncblock).

### Valeur de retour

Type : HRESULT

Code de réussite ou d'erreur HRESULT.

## Remarques

Pour récupérer la licence du module complémentaire ainsi que le résultat d'exécution de cette fonction, appelez [XStoreQueryAddonLicensesResult](/fr/reference/system/xstore/functions/xstorequeryaddonlicensesresult) après avoir appelé cette fonction.
Pour récupérer le nombre de licences obtenues par cette fonction, appelez [XStoreQueryAddonLicensesResultCount](/fr/reference/system/xstore/functions/xstorequeryaddonlicensesresultcount) après avoir appelé cette fonction.
La fonction de nombre de résultats est importante, car elle vous permet de déterminer la taille appropriée du tableau à passer à la fonction de résultat.

L'extrait de code suivant montre un exemple de récupération des licences de modules complémentaires durables (sans package) que l'utilisateur possède ou pour lesquels il peut obtenir une licence :

```cpp theme={null}
void CALLBACK QueryAddOnLicensesCallback(XAsyncBlock* asyncBlock)
{
    uint32_t count;
    HRESULT hr = XStoreQueryAddOnLicensesResultCount(
        asyncBlock,
        &count);

    if (FAILED(hr))
    {
        printf("Failed retrieve the add-on license count: 0x%x\r\n", hr);
        return;
    }

    printf("Number of add-on licenses: %d", count);

    XStoreAddonLicense* addOnLicenses = new XStoreAddonLicense[count];
    hr = XStoreQueryAddOnLicensesResult(asyncBlock, count, &addOnLicenses);

    if (FAILED(hr))
    {
        printf("Failed retrieve the add-on licenses: 0x%x\r\n", hr);
        delete[] addOnLicenses;
        return;
    }

    for (uint32_t index = 0; index < count; index++)
    {
        printf("expirationDate : %d\r\n", addOnLicenses[index].expirationDate);
        printf("inAppOfferToken: %s\r\n", addOnLicenses[index].inAppOfferToken);
        printf("isActive       : %s\r\n", addOnLicenses[index].isActive ? "true" : "false");
        printf("skuStoreId     : %s\r\n", addOnLicenses[index].skuStoreId);
    }

    delete[] addOnLicenses;
}

void QueryAddOnLicenses(XStoreContextHandle storeContextHandle, XTaskQueueHandle taskQueueHandle)
{
    auto asyncBlock = std::make_unique<XAsyncBlock>();
    ZeroMemory(asyncBlock.get(), sizeof(*asyncBlock));
    asyncBlock->queue = taskQueueHandle;
    asyncBlock->callback = QueryAddOnLicensesCallback;

    HRESULT hr = XStoreQueryAddOnLicensesAsync(
        storeContextHandle,
        asyncBlock.get());

    if (FAILED(hr))
    {
        printf("Failed to get add-on licenses: 0x%x\r\n", hr);
        return;
    }
}


```

## Configuration requise

**En-tête :** XStore.h (inclus dans XGameRuntime.h)

**Bibliothèque :** xgameruntime.lib

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

## Documentation conceptuelle

* [Opérations de base du Store](/fr/publishing/xstore-commerce/xstore-basic-operations)
* [Activation des tests de licence](/fr/publishing/xstore-commerce/xstore-licensing-setup)

## Voir aussi

[XStore](/fr/reference/system/xstore/xstore_members)\
[XStoreQueryAddonLicensesResult](/fr/reference/system/xstore/functions/xstorequeryaddonlicensesresult)\
[XStoreQueryAddonLicensesResultCount](/fr/reference/system/xstore/functions/xstorequeryaddonlicensesresultcount)


## Related topics

- [XStoreQueryAddOnLicensesAsync](/reference/system/xstore/functions/xstorequeryaddonlicensesasync.md)
- [XStoreQueryAddOnLicensesResult](/reference/system/xstore/functions/xstorequeryaddonlicensesresult.md)
