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是唯一的错误代码。
关于c++ - SHGetFolderPath返回分发版本中的垃圾字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19588132/