Método INamespaceWalk::GetIDArrayResult (shobjidl_core.h)

Obtém uma lista de objetos encontrados durante uma caminhada de namespace iniciada por INamespaceWalk::Walk.

Sintaxe

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

Parâmetros

[out] pcItems

Tipo: UINT*

O número de itens armazenados em pppidl

[out] prgpidl

Tipo: LPITEMIDLIST**

O endereço de um ponteiro para uma matriz de PIDLs que representam os itens encontrados durante a caminhada do namespace.

Valor retornado

Tipo: HRESULT

Se o método for bem-sucedido, ele retornará S_OK. Caso contrário, ele retornará um código de erro HRESULT.

Comentários

Para usar INamespaceWalk::GetIDArrayResult, NSWF_DONT_ACCUMULATE_RESULT não pode ser especificado na chamada para INamespaceWalk::Walk.

É responsabilidade do aplicativo de chamada liberar essa matriz. Chame CoTaskMemFree para cada PIDL, bem como uma vez para a própria matriz.

Exemplos

O exemplo a seguir cria a instância INamespaceWalk , inicia a caminhada na área de trabalho, percorre apenas a pasta da área de trabalho e seus filhos imediatos, recupera os PIDLs recuperados na caminhada e libera sua 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 com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho shobjidl_core.h (inclua Shobjidl.h)
Biblioteca Shell32.lib
DLL Shell32.dll (versão 6.0 ou posterior)