char desktopPath[MAX_PATH];
HRESULT r = SHGetFolderPath(NULL, CSIDL_DESKTOP, NULL, 0, desktopPath);
if (r != S_OK) {
throw XArch(new XArchEvalWindows());
}
m_desktopPath = CString(desktopPath);
Это так странно. Этот фрагмент кода работает в VS2010 как в режиме выпуска, так и в режиме отладки. После того, как я распространяю его и запускаю приложение, я получаю сообщение об ошибке «Система не может найти указанный файл». Что еще более странно, мой коллега запускает одно и то же приложение на своей машине, и оно работает.
В MSDN говорится, что SHGetFolderPath устарела, поэтому я попытался использовать SHGetKnownFolderPath. Это та же самая ситуация.
PWSTR desktopPathW = 0;
HRESULT hr = SHGetKnownFolderPath(FOLDERID_Desktop, 0, NULL, &desktopPathW);
if (!SUCCEEDED(hr)) {
throw XArch(new XArchEvalWindows());
}
CoTaskMemFree(static_cast<void*>(desktopPathW));
Есть идеи о том, что происходит? Или как мне отладить это?
Заранее спасибо.
Джерри
В комментариях прямо говорится, что S_OK
это единственный результат успеха и коды ошибок включают S_FALSE
, E_FAIL
а также E_INVALIDARG
, Вы ошибочно полагаете, что эти 3 являются единственными кодами ошибок.
Других решений пока нет …