728 wstr = olePath;
729 break;
730
731 case STRRET_WSTR :
732 wstr = strret.pOleStr;
733 break;
734
735 default:
736 return NULL;
737 }
738
739 IShellLinkW* psl;
740 hres = ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW, (LPVOID *)&psl);
741 if (SUCCEEDED(hres)) {
742 IPersistFile* ppf;
743 hres = psl->QueryInterface(IID_IPersistFile, (void**)&ppf);
744 if (SUCCEEDED(hres)) {
745 hres = ppf->Load(wstr, STGM_READ);
746 if (SUCCEEDED(hres)) {
747 if (resolve) {
748 hres = psl->Resolve(NULL, 0);
749 // Ignore failure
750 }
751 pidl = (LPITEMIDLIST)NULL;
752 hres = psl->GetIDList(&pidl);
753 }
754 ppf->Release();
755 }
756 psl->Release();
757 }
758
759 if (strret.uType == STRRET_WSTR) {
760 CoTaskMemFree(strret.pOleStr);
761 }
762 if (SUCCEEDED(hres)) {
763 return (jlong)pidl;
764 } else {
765 return 0;
766 }
767 }
768
|
728 wstr = olePath;
729 break;
730
731 case STRRET_WSTR :
732 wstr = strret.pOleStr;
733 break;
734
735 default:
736 return NULL;
737 }
738
739 IShellLinkW* psl;
740 hres = ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW, (LPVOID *)&psl);
741 if (SUCCEEDED(hres)) {
742 IPersistFile* ppf;
743 hres = psl->QueryInterface(IID_IPersistFile, (void**)&ppf);
744 if (SUCCEEDED(hres)) {
745 hres = ppf->Load(wstr, STGM_READ);
746 if (SUCCEEDED(hres)) {
747 if (resolve) {
748 hres = psl->Resolve(NULL, SLR_NO_UI);
749 // Ignore failure
750 }
751 pidl = (LPITEMIDLIST)NULL;
752 hres = psl->GetIDList(&pidl);
753 }
754 ppf->Release();
755 }
756 psl->Release();
757 }
758
759 if (strret.uType == STRRET_WSTR) {
760 CoTaskMemFree(strret.pOleStr);
761 }
762 if (SUCCEEDED(hres)) {
763 return (jlong)pidl;
764 } else {
765 return 0;
766 }
767 }
768
|