Compartilhar via


Método IEnumPortableDeviceObjectIDs::Next (portabledeviceapi.h)

O método Next recupera as próximas IDs de objeto na sequência de enumeração.

Sintaxe

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

Parâmetros

[in] cObjects

Uma contagem dos objetos solicitados.

[in, out] pObjIDs

Uma matriz de ponteiros LPWSTR , cada um especificando uma ID de objeto recuperada. O chamador deve alocar uma matriz de elementos LPWSTR cObjects . O chamador deve liberar a matriz e as cadeias de caracteres retornadas. As cadeias de caracteres são liberadas chamando CoTaskMemFree.

[in, out] pcFetched

Na entrada, esse parâmetro é ignorado. Na saída, o número de IDs realmente recuperado. Se nenhuma ID de objeto for liberada e o valor retornado for S_FALSE, não haverá mais objetos para enumerar.

Retornar valor

O método retorna um HRESULT. Os possíveis valores incluem, mas sem limitação, aqueles na tabela a seguir.

Código de retorno Descrição
S_OK
O método foi bem-sucedido.
S_FALSE
Não há mais objetos para enumerar.

Comentários

Se menos do que o número solicitado de elementos permanecer na sequência, esse método recuperará os elementos restantes. O número de elementos que são realmente recuperados é retornado por meio de pcFetched (a menos que o chamador tenha passado NULL para esse parâmetro). Objetos enumerados são todos pares, ou seja, enumerar filhos de um objeto enumerará apenas filhos diretos, não objetos netos ou mais profundos.

Exemplos


// 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;
    }
}

Requisitos

Requisito Valor
Plataforma de Destino Windows
Cabeçalho portabledeviceapi.h
Biblioteca PortableDeviceGUIDs.lib

Confira também

Enumerando conteúdo

IEnumPortableDeviceObjectIDs Interface