Example #1
0
/**
 * Create a Shell Item from relative name.
 * Complements the SHCreateItemFromRelativeName() provided by the Shell with an IShellFolder argument.
 */
HRESULT SHCreateItemFromRelativeName(IShellFolder* pFolder, LPCWSTR pszName, IBindCtx* pbc, REFIID riid, LPVOID* ppRetVal)
{
   ATLASSERT(pFolder);
   ATLASSERT(ppRetVal!=NULL);
   ATLASSERT(*ppRetVal==NULL);
   if( pFolder == NULL || pszName == NULL ) return E_INVALIDARG;
   CComQIPtr<IPersistFolder2> spPersist = pFolder;
   if( spPersist == NULL ) return E_FAIL;
   CPidl pidlFolder;
   HR( spPersist->GetCurFolder((PIDLIST_ABSOLUTE*) &pidlFolder.m_p) );
   CPidl pidlName;
   HR( pFolder->ParseDisplayName(NULL, pbc, const_cast<LPWSTR>(pszName), NULL, &pidlName, NULL) );
   return ::SHCreateItemFromIDList(pidlFolder + pidlName, riid, ppRetVal);
}