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