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 |
---|---|
|
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. |
|
La cartella di destinazione è stata individuata e restituita in ppv. |
|
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) |