다음을 통해 공유


INamespaceWalk::GetIDArrayResult 메서드(shobjidl_core.h)

INamespaceWalk::Walk에서 시작한 네임스페이스 연습 중에 찾은 개체 목록을 가져옵니다.

구문

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

매개 변수

[out] pcItems

형식: UINT*

pppidl에 저장된 항목 수

[out] prgpidl

형식: LPITEMIDLIST**

네임스페이스 연습 중에 찾은 항목을 나타내는 PIDL 배열에 대한 포인터의 주소입니다.

반환 값

형식: HRESULT

메서드가 성공하면 S_OK를 반환하고, 그러지 않으면 HRESULT 오류 코드를 반환합니다.

설명

INamespaceWalk::GetIDArrayResult를 사용하려면 INamespaceWalk::Walk 호출에서 NSWF_DONT_ACCUMULATE_RESULT 지정할 수 없습니다.

이 배열을 해제하는 것은 호출 애플리케이션의 책임입니다. 각 PIDL에 대해 CoTaskMemFree 를 호출하고 배열 자체에 대해 한 번 호출합니다.

예제

다음 예제에서는 INamespaceWalk instance 만들고, 바탕 화면에서 워크를 시작하고, 데스크톱 폴더와 해당 직계 자식만 걷고, 워크에서 검색된 PIDL을 검색하고, 배열을 해제합니다.

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

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 shobjidl_core.h(Shobjidl.h 포함)
라이브러리 Shell32.lib
DLL Shell32.dll(버전 6.0 이상)