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 |
---|---|
|
O método foi bem-sucedido. |
|
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 |