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 を呼び出し、配列自体に対して 1 回呼び出します。

次の例では、 INamespaceWalk インスタンスを作成し、デスクトップでウォークを開始し、デスクトップ フォルダーとその直接の子のみをウォークし、ウォークで取得した 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 を含む)
Library Shell32.lib
[DLL] Shell32.dll (バージョン 6.0 以降)