Метод IShellLibrary::ResolveFolder (shobjidl_core.h)
Разрешает целевое расположение папки библиотеки, даже если папка была перемещена или переименована.
Синтаксис
HRESULT ResolveFolder(
[in] IShellItem *psiFolderToResolve,
[in] DWORD dwTimeout,
[in] REFIID riid,
[out] void **ppv
);
Параметры
[in] psiFolderToResolve
Тип: IShellItem*
Объект IShellItem , представляющий папку библиотеки для поиска.
[in] dwTimeout
Тип: DWORD
Максимальное время (в миллисекундах) метод попытается найти папку перед возвратом. Если не удалось найти папку до истечения указанного времени, возвращается ошибка.
[in] riid
Тип: REFIID
Ссылка на IID интерфейса для получения в ppv , которая будет представлять разрешенное целевое расположение. Обычно это значение IID_IShellItem, но оно также может быть IID_IShellItem2 или IID любого другого интерфейса, реализованного CShellItem.
[out] ppv
Тип: void**
Указатель на интерфейс, запрошенный в riid.
Возвращаемое значение
Тип: HRESULT
Этот метод может возвращать одно из этих значений.
Код возврата | Описание |
---|---|
|
Целевая папка была найдена и возвращена в ppv; Однако библиотека обновлена, поэтому для сохранения этих изменений следует вызывать IShellLibrary::Commit или IShellLibrary::Save . |
|
Целевая папка была найдена и возвращена в ppv. |
|
Этот метод может возвращать другие значения ошибок. |
Комментарии
Этот метод является блокирующим вызовом, который может блокировать вызывающий поток до тех пор, пока не будет возвращено время, указанное в параметре dwTimeout . Поскольку он блокирует поток, из которого он вызывается, его не следует вызывать из потока, который также обрабатывает взаимодействия пользовательского интерфейса.
Этот метод не запрашивает у пользователя поиск папки вручную, если ему не удается разрешить расположение.
Для удобства вместо этого метода можно использовать SHResolveFolderPathInLibrary .
Рекомендуется использовать макрос IID_PPV_ARGS , определенный в Objbase.h, для упаковки параметров riid и ppv . Этот макрос предоставляет правильный IID на основе интерфейса, на который указывает значение в ppv, что исключает возможность ошибки кода.
Примеры
В следующем примере кода показана вспомогающая функция SHResolveFolderPathInLibrary, которая заключает этот метод в оболочку.
//
// from shobjidl.h
//
__inline HRESULT SHResolveFolderPathInLibrary(
__in IShellLibrary *plib,
__in PCWSTR pszFolderPath,
__in DWORD dwTimeout,
__deref_out PWSTR *ppszResolvedPath
)
{
*ppszResolvedPath = NULL;
PIDLIST_ABSOLUTE pidlFolder =
SHSimpleIDListFromPath(pszFolderPath);
HRESULT hr = pidlFolder ? S_OK : E_INVALIDARG;
if (SUCCEEDED(hr))
{
IShellItem *psiFolder;
hr = SHCreateItemFromIDList(
pidlFolder,
IID_PPV_ARGS(&psiFolder));
if (SUCCEEDED(hr))
{
IShellItem *psiResolved;
hr = plib->ResolveFolder(
psiFolder,
dwTimeout,
IID_PPV_ARGS(&psiResolved));
if (SUCCEEDED(hr))
{
hr = psiResolved->GetDisplayName(
SIGDN_DESKTOPABSOLUTEPARSING,
ppszResolvedPath);
psiResolved->Release();
}
psiFolder->Release();
}
CoTaskMemFree(pidlFolder);
}
return hr;
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 7 [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 R2 [только классические приложения] |
Целевая платформа | Windows |
Header | shobjidl_core.h (включая Shobjidl.h) |