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_FALSEE_FAILE_INVALIDARG。您错误地认为这3是唯一的错误代码。

关于c++ - SHGetFolderPath返回分发版本中的垃圾字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19588132/

10-10 02:03