从 Windows Vista 开始不推荐使用 SHGetFolderPath()
函数:http://msdn.microsoft.com/en-us/library/bb762181%28v=VS.85%29.aspx
在 Windows 中检索应用程序文件夹路径的替代方法是什么?
SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath)
除此之外,为什么在使用此函数时会出现这些错误:
Error 1 error C2065: 'CSIDL_COMMON_APPDATA' : undeclared identifier
Error 2 error C3861: 'SHGetFolderPath': identifier not found
最佳答案
您链接到的文档中描述了替代方法。即它是 SHGetKnownFolderPath
。
但是,SHGetKnownFolderPath
仅在 Vista 或更高版本上可用。因此,如果您使用加载时间链接,并在 XP 上运行调用 SHGetKnownFolderPath
的程序,那么该程序将无法启动。如果您希望支持 XP,这显然是一个问题。
现在,您可以切换到 SHGetKnownFolderPath
的运行时链接。在调用之前执行版本检查,如果该函数不可用,则回退到 SHGetFolderPath
。
就个人而言,我不会让这种弃用让您过度担心。 Microsoft 以保持向后兼容性而闻名。不要指望 SHGetFolderPath
很快就会消失。您会发现 SHGetFolderPath
存在于 Windows 8 中,我希望它仍然存在于 10 年后当前的任何 Windows 中。我的建议是坚持加载时链接,只有在你放弃支持 XP 时才切换到 SHGetKnownFolderPath
。
您在编辑中提出的另一个问题是如何调用 SHGetFolderPath
。您需要遵守您在问题中链接到的 MSDN 文档主题底部列出的要求。具体来说,包括 Shlobj.h
并将 Shlobj.lib
传递给链接器。
关于c++ - SHGetFolderPath 已弃用 : What is alternative to retrieve path for Windows folders?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18493484/