我在Win7 x64上使用Delphi XE2,为Win32编译。
我已经开始使用CSIDL_LOCAL_APPDATA
为我的第一个软件版本设计安装。
我在MSDN上看到,从Vista开始,MS希望我们开始使用KNOWNFOLDERID
值而不是CSIDL
值:
但是,当我尝试将GetSpecialFolderPath(CSIDL_LOCAL_APPDATA,false)
替换为GetSpecialFolderPath(FOLDERID_LocalAppData,false)
时,XE2无法识别FOLDERID_LocalAppData
。
我认为既然XE2在Vista之后很久就出现了,那么应该(如果你原谅我)在{{1}中支持/识别这些常量(?)在XE2中。
如果没有,有人知道Win10是否仍能识别Winapi.Windows
值吗?
答案 0 :(得分:4)
并非Delphi本身支持的Win32 API中的所有内容都在Winapi.Windows
单元中实现。例如,CSIDL
单位实施Winapi.SHFolder
支持,KNOWNFOLDERID
单位实施Winapi.KnownFolders
支持(是的,确实存在于XE2中)。
GetSpecialFolderPath()
不是本机Delphi函数,因此您必须使用第三方代码。 CSIDL
是Integer
传递给SHGetFolderPath()
(或更早版CSIDL
的函数),而KNOWNFOLDERID
是TGuid
传递给FOLDERID_...
改为SHGetKnownFolderPath()
。因此,您不能只将GetSpecialFolderPath()
常量传递给CSIDL
,除非它已被重载以接受KNOWNFOLDERID
或$http.post( url, data, config)
作为输入。