INamespaceWalk::GetIDArrayResult-Methode (shobjidl_core.h)

Ruft eine Liste der Objekte ab, die während eines von INamespaceWalk::Walk initiierten Namespace-Walk gefunden wurden.

Syntax

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

Parameter

[out] pcItems

Typ: UINT*

Die Anzahl der in pppidl gespeicherten Elemente

[out] prgpidl

Typ: LPITEMIDLIST**

Die Adresse eines Zeigers auf ein Array von PIDLs, die die elemente darstellen, die während des Namespacelaufs gefunden wurden.

Rückgabewert

Typ: HRESULT

Wenn diese Methode erfolgreich ist, wird S_OK zurückgegeben. Andernfalls wird ein Fehlercode HRESULT zurückgegeben.

Hinweise

Um INamespaceWalk::GetIDArrayResult zu verwenden, kann NSWF_DONT_ACCUMULATE_RESULT nicht im Aufruf von INamespaceWalk::Walk angegeben werden.

Es liegt in der Verantwortung der aufrufenden Anwendung, dieses Array zu befreien. Rufen Sie CoTaskMemFree für jede PIDL und einmal für das Array selbst auf.

Beispiele

Im folgenden Beispiel wird der INamespaceWalk-instance erstellt, der Spaziergang auf dem Desktop beginnt, nur den Desktopordner und die unmittelbaren untergeordneten Elemente durchlaufen, die im Exemplar abgerufenen PIDLs abgerufen und deren Array freigegeben.

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

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile shobjidl_core.h (einschließlich Shobjidl.h)
Bibliothek Shell32.lib
DLL Shell32.dll (Version 6.0 oder höher)