Metodo INamespaceWalk::GetIDArrayResult (shobjidl_core.h)
Ottiene un elenco di oggetti trovati durante una procedura dettagliata dello spazio dei nomi avviata da INamespaceWalk::Walk.
Sintassi
HRESULT GetIDArrayResult(
[out] UINT *pcItems,
[out] PIDLIST_ABSOLUTE **prgpidl
);
Parametri
[out] pcItems
Tipo: UINT*
Numero di elementi archiviati in pppidl
[out] prgpidl
Tipo: LPITEMIDLIST**
Indirizzo di un puntatore a una matrice di PIDL che rappresenta gli elementi trovati durante la procedura dettagliata dello spazio dei nomi.
Valore restituito
Tipo: HRESULT
Se questo metodo ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT .
Commenti
Per usare INamespaceWalk::GetIDArrayResult, non è possibile specificare NSWF_DONT_ACCUMULATE_RESULT nella chiamata a INamespaceWalk::Walk.
È responsabilità dell'applicazione chiamante liberare questa matrice. Chiamare CoTaskMemFree per ogni FILE PIDL e una volta per la matrice stessa.
Esempio
L'esempio seguente crea l'istanza di INamespaceWalk , inizia la procedura sul desktop, visualizza solo la cartella desktop e i relativi elementi figlio immediati, recupera i PIDL recuperati nella procedura e libera la matrice.
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;
}
Requisiti
Client minimo supportato | Windows XP [solo app desktop] |
Server minimo supportato | Windows Server 2003 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | shobjidl_core.h (include Shobjidl.h) |
Libreria | Shell32.lib |
DLL | Shell32.dll (versione 6.0 o successiva) |