SHGetFolderPath возвращает строку мусора в распространяемой версии

    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));

Есть идеи о том, что происходит? Или как мне отладить это?

Заранее спасибо.
Джерри

0

Решение

В комментариях прямо говорится, что S_OK это единственный результат успеха и коды ошибок включают S_FALSE, E_FAIL а также E_INVALIDARG, Вы ошибочно полагаете, что эти 3 являются единственными кодами ошибок.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]