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 以降) |