Método INamespaceWalk::GetIDArrayResult (shobjidl_core.h)
Obtiene una lista de objetos encontrados durante un recorrido de espacio de nombres iniciado por INamespaceWalk::Walk.
Sintaxis
HRESULT GetIDArrayResult(
[out] UINT *pcItems,
[out] PIDLIST_ABSOLUTE **prgpidl
);
Parámetros
[out] pcItems
Tipo: UINT*
Número de elementos almacenados en pppidl
[out] prgpidl
Tipo: LPITEMIDLIST**
Dirección de un puntero a una matriz de PIN que representa los elementos encontrados durante el recorrido del espacio de nombres.
Valor devuelto
Tipo: HRESULT
Si este método se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error de HRESULT.
Comentarios
Para usar INamespaceWalk::GetIDArrayResult, no se puede especificar NSWF_DONT_ACCUMULATE_RESULT en la llamada a INamespaceWalk::Walk.
Es responsabilidad de la aplicación que realiza la llamada liberar esta matriz. Llame a CoTaskMemFree para cada PIDL, así como una vez para la propia matriz.
Ejemplos
En el ejemplo siguiente se crea la instancia de INamespaceWalk , se inicia el recorrido en el escritorio, solo se recorre la carpeta de escritorio y sus elementos secundarios inmediatos, se recuperan los PIN recuperados en el recorrido y se libera su matriz.
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;
}
Requisitos
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | shobjidl_core.h (include Shobjidl.h) |
Library | Shell32.lib |
Archivo DLL | Shell32.dll (versión 6.0 o posterior) |