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