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 实例,在桌面上开始演练,仅遍视桌面文件夹及其直属子级,检索在演练中检索到的 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 或更高版本) |