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
S_OK
대상 폴더가 배치되어 ppv로 반환되었습니다. 그러나 라이브러리가 업데이트되었으므로 이러한 변경 내용을 유지하기 위해 IShellLibrary::Commit 또는 IShellLibrary::Save 를 호출해야 합니다.
S_FALSE
대상 폴더가 위치하고 ppv에서 반환되었습니다.
전자_
이 메서드는 다른 오류 값을 반환할 수 있습니다.

설명

이 메서드는 반환하기 전에 dwTimeout 매개 변수에 지정된 시간만큼 호출 스레드를 차단할 수 있는 차단 호출입니다. 호출되는 스레드를 차단하기 때문에 사용자 인터페이스 상호 작용도 처리하는 스레드에서 호출해서는 안 됩니다.

이 메서드는 위치를 resolve 수 없는 경우 폴더를 수동으로 찾도록 사용자에게 메시지를 표시하지 않습니다.

편의를 위해 이 메서드 대신 SHResolveFolderPathInLibrary 를 사용할 수 있습니다.

Objbase.h에 정의된 IID_PPV_ARGS 매크로를 사용하여 riidppv 매개 변수를 패키지하는 것이 좋습니다. 이 매크로는 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 포함)

추가 정보

IShellLibrary

IShellLibrary::Commit

IShellLibrary::Save

SHResolveFolderPathInLibrary

Windows 라이브러리