SHGetFolderPath以分发版本返回垃圾字符串

时间:2013-10-25 11:06:49

标签: c++ windows string desktop

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

有关正在发生的事情的任何想法?或者我怎么想调试这个?

提前致谢。 杰里

1 个答案:

答案 0 :(得分:2)

评论明确指出S_OK是唯一的成功结果,错误代码包括 S_FALSEE_FAILE_INVALIDARG。您错误地认为这3个是唯一的错误代码。