Метод 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, NSWF_DONT_ACCUMULATE_RESULT нельзя указать в вызове INamespaceWalk::Walk.
Ответственность за освобождение этого массива лежит на вызывающем приложении. Вызовите CoTaskMemFree для каждого PIDL, а также один раз для самого массива.
Примеры
В следующем примере создается экземпляр 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 |
Header | shobjidl_core.h (включая Shobjidl.h) |
Библиотека | Shell32.lib |
DLL | Shell32.dll (версия 6.0 или более поздняя) |