Разрешить файл быстрого доступа
Я использую следующий код для разрешения ярлыка, но CoUninitialize дает нарушение доступа. - Что случилось?
Полное имя тип данных wchar[в max_path];
HRESULT hres = CoInitializeEx(0, COINIT_MULTITHREADED);
HRESULT hr = ResolveIt(fname, FullName, MAX_PATH);
CoUninitialize(); // это все еще дает нарушение доступа
HRESULT ResolveIt(WCHAR *LinkFile, WCHAR Path[], int iPathBufferSize) { Path[0] = '\0'; // Assume failure // Get a pointer to the IShellLink interface. It is assumed that CoInitialize // has already been called. IShellLink* psl; HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl); if (SUCCEEDED(hres)) { IPersistFile* ppf; // Get a pointer to the IPersistFile interface. hres = psl->QueryInterface(IID_IPersistFile, (void**)&ppf); if (SUCCEEDED(hres)) { // Load the shortcut. hres = ppf->Load(LinkFile, STGM_READ); hres = psl->Resolve(GetDesktopWindow(), 0); if (SUCCEEDED(hres)) { // Get the path to the link target. hres = psl->GetPath(Path, MAX_PATH, 0, SLGP_SHORTPATH); } // Release the pointer to the IPersistFile interface. ppf->Release(); } // Release the pointer to the IShellLink interface. psl->Release(); } return hres; }
Что я уже пробовал:
Я попытался обойтись без вызова интерфейса ->Resolve и изменения параметров, но нарушение доступа остается. В моем примере используется Юникод, поэтому преобразование символов в широкие символы не должно быть необходимым. Возвращаемый путь является правильным, и все возвращаемые значения HRESULT являются S_OK.
Andre Oosthuizen
Может быть, это поможет? - https://stackoverflow.com/questions/2653797/why-does-couninitialize-cause-an-error-on-exit