replace为Windows XP上的:: SHCreateItemFromParsingName()

我有一个需要在XP上运行的应用程序,但我想能够调用:: SHCreateItemFromParsingName(),它只能从Vista开始。

这: http : //social.msdn.microsoft.com/Forums/vstudio/en-US/04eab1a9-5024-4199-b66c-8d20a83d4af4/shcreateitemfromparsingname-analog-on-xp?forum=vcgeneral

说过:

我相信你可以达到如下效果:SHParseDisplayName获取项目PIDL,然后SHGetDesktopFolder,最后IShellFolder :: BindToObject

我试过的:

IFileDialog *pfd; .... PIDLIST_ABSOLUTE pidl; HRESULT hresult = ::SHParseDisplayName(m_path, 0, &pidl, SFGAO_FOLDER, 0); if (SUCCEEDED(hresult)) { IShellFolder *psf; hresult = ::SHGetDesktopFolder(&psf); if (SUCCEEDED(hresult)) { IShellItem *child; hresult = psf->BindToObject(pidl, 0, IID_IShellFolder, (void**)&child); if (SUCCEEDED(hresult)) { pfd->SetFolder(child); } } } 

我认为我主要是与BindToObject挣扎(因为我不是一个特别熟练的Windows程序员!)

这是甚至含糊不清的权利?

根据@Raymond Chen的评论,这似乎是一个可行的替代品。

 PIDLIST_ABSOLUTE pidl; HRESULT hresult = ::SHParseDisplayName(m_path, 0, &pidl, SFGAO_FOLDER, 0); if (SUCCEEDED(hresult)) { IShellItem *psi; hresult = ::SHCreateShellItem(NULL, NULL, pidl, &psi); if (SUCCEEDED(hresult)) { pfd->SetFolder(psi); } ILFree(pidl); }