Partager via


IEnumPortableDeviceObjectIDs ::Next, méthode (portabledeviceapi.h)

La méthode Next récupère le ou plusieurs ID d’objet suivants dans la séquence d’énumération.

Syntaxe

HRESULT Next(
  [in]      ULONG  cObjects,
  [in, out] LPWSTR *pObjIDs,
  [in, out] ULONG  *pcFetched
);

Paramètres

[in] cObjects

Nombre d’objets demandés.

[in, out] pObjIDs

Tableau de pointeurs LPWSTR , chacun spécifiant un ID d’objet récupéré. L’appelant doit allouer un tableau d’éléments CObjects LPWSTR. L’appelant doit libérer le tableau et les chaînes retournées. Les chaînes sont libérées en appelant CoTaskMemFree.

[in, out] pcFetched

Lors de l’entrée, ce paramètre est ignoré. Lors de la sortie, le nombre d’ID réellement récupérés. Si aucun ID d’objet n’est libéré et que la valeur de retour est S_FALSE, il n’y a plus d’objets à énumérer.

Valeur retournée

Cette méthode retourne un code HRESULT. Les valeurs possibles sont notamment celles figurant dans le tableau suivant.

Code de retour Description
S_OK
S_OK
S_FALSE
Il n’y a plus d’objets à énumérer.

Remarques

Si le nombre d’éléments restant dans la séquence est inférieur au nombre demandé, cette méthode récupère les éléments restants. Le nombre d’éléments réellement récupérés est retourné via pcFetched (sauf si l’appelant a passé la valeur NULL pour ce paramètre). Les objets énumérés sont tous des pairs, c’est-à-dire que l’énumération des enfants d’un objet énumère uniquement les enfants directs, et non les petits-enfants ou les objets plus profonds.

Exemples


// This number controls how many object identifiers are requested during each call
// to IEnumPortableDeviceObjectIDs::Next()
#define NUM_OBJECTS_TO_REQUEST  10

// Recursively called function which enumerates using the specified
// object identifier as the parent.
void RecursiveEnumerate(LPCWSTR wszParentObjectID, IPortableDeviceContent* pContent)
{
    HRESULT                       hr             = S_OK;
    IEnumPortableDeviceObjectIDs* pEnumObjectIDs = NULL;

    if ((wszParentObjectID == NULL) ||
        (pContent          == NULL))
    {
        return;
    }

    // wszParentObjectID is the object identifier of the parent being used for enumeration

    // Get an IEnumPortableDeviceObjectIDs interface by calling EnumObjects with the
    // specified parent object identifier.
    hr = pContent->EnumObjects(0, wszParentObjectID, NULL, &pEnumObjectIDs);
    if (FAILED(hr))
    {
        // Failed to get IEnumPortableDeviceObjectIDs from IPortableDeviceContent
    }

    // Loop calling Next() while S_OK is being returned.
    while(hr == S_OK)
    {
        DWORD  cFetched = 0;
        LPWSTR szObjectIDArray[NUM_OBJECTS_TO_REQUEST] = {0};
        hr = pEnumObjectIDs->Next(NUM_OBJECTS_TO_REQUEST, // Number of objects to request on each NEXT call
                                  szObjectIDArray,        // Array of LPWSTR array which will be populated on each NEXT call
                                  &cFetched);             // Number of objects written to the LPWSTR array
        if (SUCCEEDED(hr))
        {
            // Traverse the results of the Next() operation and recursively enumerate
            // Remember to free all returned object identifiers using CoTaskMemFree()
            for (DWORD dwIndex = 0; dwIndex < cFetched; dwIndex++)
            {
                RecursiveEnumerate(szObjectIDArray[dwIndex],pContent);

                // Free allocated LPWSTRs after the recursive enumeration call has completed.
                CoTaskMemFree(szObjectIDArray[dwIndex]);
                szObjectIDArray[dwIndex] = NULL;
            }
        }
    }

    // Release the IEnumPortableDeviceObjectIDs when finished
    if (pEnumObjectIDs != NULL)
    {
        pEnumObjectIDs->Release();
        pEnumObjectIDs = NULL;
    }
}

Configuration requise

Condition requise Valeur
Plateforme cible Windows
En-tête portabledeviceapi.h
Bibliothèque PortableDeviceGUIDs.lib

Voir aussi

Énumération du contenu

IEnumPortableDeviceObjectIDs, interface