c++ - SHGetFolderPath 在分发版本中返回垃圾字符串

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

太奇怪了。这段代码在发布和 Debug模式下都适用于 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/

相关文章:

java - 为什么 String.equalsIgnoreCase 这么慢

c++ - 使用 QVector 的内存泄漏

c++ - 在 make 文件中链接 g++ 和 lib 不起作用

c++ - 无法将结构注册为增强几何3D点

c# - 在 C# 中,HttpClient.getStringAsync() 方法的同步替代方法是什么?

java - 即使在 Windows 8 Enterprise 上设置了路径,也无法运行 JAVA - Cordova

c++使用stod的getline()的总和

java - 从字符串数组+颜色词中获取每个单词

c++ - C(++) 结构力额外填充

windows - Meteor:windows下部署