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
확인된 대상 위치를 나타내는 ppv 에서 가져올 인터페이스의 IID에 대한 참조입니다. 이 값은 일반적으로 IID_IShellItem 수 있지만 IID_IShellItem2 또는 CShellItem에서 구현되는 다른 인터페이스의 IID일 수도 있습니다.
[out] ppv
형식: void**
riid에서 요청된 인터페이스에 대한 포인터입니다.
반환 값
형식: HRESULT
이 메서드는 이러한 값 중 하나를 반환할 수 있습니다.
반환 코드 | Description |
---|---|
|
대상 폴더가 배치되어 ppv로 반환되었습니다. 그러나 라이브러리가 업데이트되었으므로 이러한 변경 내용을 유지하기 위해 IShellLibrary::Commit 또는 IShellLibrary::Save 를 호출해야 합니다. |
|
대상 폴더가 위치하고 ppv에서 반환되었습니다. |
|
이 메서드는 다른 오류 값을 반환할 수 있습니다. |
설명
이 메서드는 반환하기 전에 dwTimeout 매개 변수에 지정된 시간만큼 호출 스레드를 차단할 수 있는 차단 호출입니다. 호출되는 스레드를 차단하기 때문에 사용자 인터페이스 상호 작용도 처리하는 스레드에서 호출해서는 안 됩니다.
이 메서드는 위치를 resolve 수 없는 경우 폴더를 수동으로 찾도록 사용자에게 메시지를 표시하지 않습니다.
편의를 위해 이 메서드 대신 SHResolveFolderPathInLibrary 를 사용할 수 있습니다.
Objbase.h에 정의된 IID_PPV_ARGS 매크로를 사용하여 riid 및 ppv 매개 변수를 패키지하는 것이 좋습니다. 이 매크로는 ppv의 값으로 가리키는 인터페이스를 기반으로 올바른 IID를 제공하므로 코딩 오류가 발생할 가능성이 없습니다.
예제
다음 코드 예제에서는 이 메서드를 래핑하는 도우미 함수 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 |
헤더 | shobjidl_core.h(Shobjidl.h 포함) |