Condividi tramite


Metodo IShellLibrary::ResolveFolder (shobjidl_core.h)

Risolve il percorso di destinazione di una cartella di libreria, anche se la cartella è stata spostata o rinominata.

Sintassi

HRESULT ResolveFolder(
  [in]  IShellItem *psiFolderToResolve,
  [in]  DWORD      dwTimeout,
  [in]  REFIID     riid,
  [out] void       **ppv
);

Parametri

[in] psiFolderToResolve

Tipo: IShellItem*

Oggetto IShellItem che rappresenta la cartella della libreria da individuare.

[in] dwTimeout

Tipo: DWORD

Il tempo massimo, espresso in millisecondi, il metodo tenterà di individuare la cartella prima di restituire. Se non è stato possibile individuare la cartella prima del tempo specificato, viene restituito un errore.

[in] riid

Tipo: REFIID

Riferimento all'IID dell'interfaccia per ottenere in ppv che rappresenterà il percorso di destinazione risolto. Questo valore è in genere IID_IShellItem, ma può anche essere IID_IShellItem2 o l'IID di qualsiasi altra interfaccia implementata da CShellItem.

[out] ppv

Tipo: void**

Puntatore all'interfaccia richiesta in riid.

Valore restituito

Tipo: HRESULT

Questo metodo può restituire uno di questi valori.

Codice restituito Descrizione
S_OK
La cartella di destinazione è stata individuata e restituita in ppv; Tuttavia, la libreria è stata aggiornata in modo che IShellLibrary::Commit o IShellLibrary::Save debba essere chiamato per rendere persistenti queste modifiche.
S_FALSE
La cartella di destinazione è stata individuata e restituita in ppv.
E_
Questo metodo può restituire altri valori di errore.

Commenti

Questo metodo è una chiamata di blocco che può bloccare il thread chiamante purché l'ora specificata nel parametro dwTimeout prima della restituzione. Poiché blocca il thread da cui viene chiamato, non deve essere chiamato da un thread che gestisce anche le interazioni dell'interfaccia utente.

Questo metodo non richiederà all'utente di individuare manualmente la cartella se non è in grado di risolvere il percorso.

Per praticità, è possibile usare SHResolveFolderPathInLibrary al posto di questo metodo.

È consigliabile usare la macro IID_PPV_ARGS , definita in Objbase.h, per creare il pacchetto dei parametri riid e ppv . Questa macro fornisce l'IID corretto in base all'interfaccia a cui punta il valore in ppv, che elimina la possibilità di un errore di codifica.

Esempio

Nell'esempio di codice seguente viene illustrata la funzione helper SHResolveFolderPathInLibrary, che esegue il wrapping di questo metodo.

//
// 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;
}

Requisiti

Requisito Valore
Client minimo supportato Windows 7 [solo app desktop]
Server minimo supportato Windows Server 2008 R2 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione shobjidl_core.h (include Shobjidl.h)

Vedi anche

IShellLibrary

IShellLibrary::Commit

IShellLibrary::Save

SHResolveFolderPathInLibrary

Librerie di Windows