在尝试让Log4D在XE4中进行编译时,我看到了
[dcc32错误] Log4D.pas(2139):E2003未声明的标识符:'ShortDateFormat'
在这条线上:
SetOption(DateFormatOpt, ShortDateFormat);
进行一些谷歌搜索使我想到了将
ShortDateFormat
更改为FormatSettings.ShortDateFormat
的解决方案,这导致在XE4上的以下编译代码:SetOption(DateFormatOpt, FormatSettings.ShortDateFormat);
但是,我真的不明白为什么要解决这个问题,为什么需要指定
FormatSettings
,因为我已经在我的uses语句中包括了SysUtils
,其次,我不确定如何重写此行以继续向后与该开源项目已经支持的Delphi版本兼容。我想我可以为引入的任何版本的Delphi
FormatSettings
在该参数或代码行周围添加一个IFDEF-但是我什至不确定那是什么版本的Delphi,更不用说这是解决这个问题的好方法问题。 最佳答案
全局SysUtils.ShortDateFormat
最终在XE3中被删除,请参见Global Variables
。
在现代Delphi版本中,也不建议使用全局FormatSettings
变量记录。主要原因是它不是线程安全的(旧的全局ShortDateFormat
也受其困扰)。您应该定义自己的TFormatSettings
变量,该变量在整个范围内都应保持一致。
这还将使您的代码向后兼容。
但是,初始化您的FormatSetting
记录的方法因Delphi版本而异。
在旧版本(D7 +)上,请使用:
GetLocaleFormatSettings(GetThreadLocale, FormatSettings);
在新版本(XE +)中:
FormatSettings := TFormatSettings.Create(GetThreadLocale); // Or one of the overloads