Partager via


INamespaceWalk::GetIDArrayResult, méthode (shobjidl_core.h)

Obtient la liste des objets trouvés lors d’une procédure d’espace de noms initiée par INamespaceWalk::Walk.

Syntaxe

HRESULT GetIDArrayResult(
  [out] UINT             *pcItems,
  [out] PIDLIST_ABSOLUTE **prgpidl
);

Paramètres

[out] pcItems

Type : UINT*

Nombre d’éléments stockés dans pppidl

[out] prgpidl

Type : LPITEMIDLIST**

Adresse d’un pointeur vers un tableau de LISTES DE DLL représentant les éléments trouvés pendant la procédure d’espace de noms.

Valeur retournée

Type : HRESULT

Si cette méthode réussit, elle retourne S_OK. Sinon, elle retourne un code d’erreur HRESULT.

Remarques

Pour utiliser INamespaceWalk::GetIDArrayResult, NSWF_DONT_ACCUMULATE_RESULT ne peut pas être spécifié dans l’appel à INamespaceWalk::Walk.

Il incombe à l’application appelante de libérer ce tableau. Appelez CoTaskMemFree pour chaque PIDL, ainsi qu’une fois pour le tableau lui-même.

Exemples

L’exemple suivant crée le instance INamespaceWalk, commence la marche à pied sur le bureau, marche uniquement sur le dossier du bureau et ses enfants immédiats, récupère les FICHIERS PIDL récupérés dans la marche et libère leur tableau.

void NamespaceWalk_Example()
{
    // Note that error checking has been omitted for clarity.
    
    INamespaceWalk *pnsw = NULL;
    IShellFolder *psfDesktop = NULL;

    // Get a pointer to the desktop to use as our root node
    hr = SHGetDesktopFolder(&psfDesktop);

    // Create the INamespaceWalk instance
    hr = CoCreateInstance(CLSID_NamespaceWalker, 
                          NULL, 
                          CLSCTX_INPROC,
                          IID_INamespaceWalk,
                          (void **)&pnsw);

    // Walk the desktop folder and one level of subfolders    
    hr = pnsw->Walk(psfDesktop, NSWF_NONE_IMPLIES_ALL, 1, NULL);

    UINT cItems;
    PIDLIST_ABSOLUTE *ppidls;
    
    // Retrieve the array of PIDLs gathered in the walk
    hr = pnsw->GetIDArrayResult(&cItems, &ppidls);

    // Perform some action using the PIDLs

    // The calling function is responsible for freeing the PIDL array
    FreeIDListArrayFull(ppidls, cItems);
    
    return;
}

void FreeIDListArrayFull(PIDLIST_ABSOLUTE *ppidls, UINT cItems)
{ 
    // Free the array elements
    for (UINT i = 0; i < cItems; i++) 
    { 
        CoTaskMemFree(ppidls[i]); 
    } 
    
    // Free the array itself
    CoTaskMemFree(ppidls);
    
    return; 
}

Configuration requise

   
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête shobjidl_core.h (inclure Shobjidl.h)
Bibliothèque Shell32.lib
DLL Shell32.dll (version 6.0 ou ultérieure)