ShortDateFormat vs FormatSettings.ShortDateFormat?



试图让Log4D在XE4中编译,我看到

[dcc32错误]Log4D.pas(2139): E2003未声明的标识符:'ShortDateFormat'

:

SetOption(DateFormatOpt, ShortDateFormat); 

在谷歌上搜索了一下,我找到了将ShortDateFormat更改为FormatSettings.ShortDateFormat的解决方案,这导致了XE4上的以下编译代码:

SetOption(DateFormatOpt, FormatSettings.ShortDateFormat); 

然而,我真的不理解为什么修复了为什么需要指定FormatSettings的事情,因为我已经在我的使用声明中包含了SysUtils,其次,我不确定如何重写这一行以继续向后兼容这个开源项目已经支持的Delphi版本。

我想我可以添加一个IFDEF周围的参数或行代码为任何版本的Delphi引入FormatSettings -但我甚至不确定什么版本的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

根据我以前的互联网研究(你可以相信互联网上的一切,不是吗?),旧的ShortDateFormat从Delphi XE开始被弃用。所以,是的,你可以用IFDEF来解决这个问题。这就是我的工作。然而,根据Peter Johnson的DelphiDabbler博客,TFormatSettings是在Delphi 7中引入的,但我不能证实这一点。

修复编译错误:

  • 下载更新版本的jedi。inc from https://github.com/project-jedi/jedi/blob/master/jedi.inc
  • 放置新的绝地武士。Log4D源文件夹

并更改Log4D中的2211行。不是

SetOption(DateFormatOpt, {$IFDEF DELPHIXE_UP}FormatSettings.{$ENDIF}ShortDateFormat);

(我已经向Log4D项目管理员提交了一些补丁请求)

相关内容

  • 没有找到相关文章

最新更新