繁体   English   中英

如何检测特定的Delphi构建?

[英]How to detect specific Delphi builds?

这与另一个Delphi版本问题有关但仍然不同;

我正在寻找一种方法来检测编译我的代码的Delphi编译器的service-pack(或内部版本号)。 jedi.inc很不错,但它并没有告诉我确切的版本。 (我也不能在那里使用SUPPORTS_ *定义,因为那些也与版本相关)

我需要这个,因为旧版本中存在一些错误(在这种情况下,它是Delphi 2009中_ValLong错误 ), 这些错误已在以后的服务包中修复(在本例中为Delphi 2009 service pack 3)。

目前我的代码中有各种检查,如下所示:

{$ IFDEF BUG_QC_68123}

但我不能在我的主要包含文件中说这个:

{$IFDEF DELPHI2009_UP}
  {$DEFINE BUG_QC_68123}
{$ENDIF}

...因为这将错过D2009SP3及更高版本不再存在此错误的事实。

有任何想法吗?

PS:这可能也适用于较旧的(和较新的)Delphi版本,因此我认为任何库和/或组件供应商也会对此感兴趣。

为每个版本定义了符号:

VER80 - Delphi 1
VER90 - Delphi 2
VER100 - Delphi 3
VER120 - Delphi 4
VER130 - Delphi 5
VER140 - Delphi 6
VER150 - Delphi 7
VER160 - Delphi 8
VER170 - Delphi 2005
VER180 - Delphi 2006
VER180 - Delphi 2007
VER185 - Delphi 2007 (Note: symbol VER185, for example, is used to indicate Delphi 2007 compiler or an earlier version.)
VER190 - Delphi 2007 for .NET
VER200 - C++ Builder 2009
VER210 - Delphi 2010
VER220 - Delphi XE
VER230 - Delphi XE2
VER240 - Delphi XE3
VER250 - Delphi XE4
VER260 - Delphi XE5
VER270 - Delphi XE6
VER280 - Delphi XE7
WIN32 - Indicates that the operating environment is the Win32 API.
LINUX - Indicates that the operating environment is Linux
MSWINDOWS - Indicates that the operating environment is the MS Windows/li] 
CONSOLE - Indicates that an application is being compiled as a console application

来源 另一个来源您无法检查不同的内部版本号。

对于好奇的VER10-VER70,其中turbo pascal版本和VER110是C ++构建器版本。

不幸的是,像System.pas中的RTLVersion这样的常量在更新中没有更新,但我认为如果有人想为它做一个QC条目,那将是一个很好的建议。

如果您正在测试的错误在代码中重现是可行的,您可以在启动时始终测试它们并设置自己的全局标志。

我通过确保始终应用最新更新来解决这些差异。 我还没有遇到一个更新不稳定的情况,并迫使我回滚。 至少不是Delphi。

编译器不公开该信息。 它只告诉您主要版本,在应用更新时不会更改。

我认为你能做的最好就是总是为最新的更新编写代码。 假设您的代码的使用者也将拥有最新的更新。 如果他们不这样做,那就是他们自己的错,而不是需要担心的问题。 在您的系统要求中提及它。 当然,你的代码对他们不起作用,但其他人也不会这样做,因为他们仍在使用已知错误的代码。

下一个最好的选择是假设没有应用更新。 也就是说,编写代码就好像所有已知错误仍然存​​在一样。 缺点是您的代码可能无法运行,因此通过升级做出正确事情的每个人都会因为继续使用您的次优代码而受到惩罚。

您可以尝试在软件中包含编译器文件版本。 例如,DCC32.exe上有一个文件版本,您可以通过编程方式获取该文件,然后将其作为const写入单元。 这可以作为构建过程的一部分来完成,因此它在构建应用程序之前获取版本信息(使用FinalBuilder这样很容易)。

我已经为其他事情做了这个,所以在我们的关于屏幕上我们可以得到各种有用的信息。 此外,当我们的应用程序中出现错误时,我们可以将此信息捆绑到我们的EurekaLog错误报告中。

但是我不知道DCC32.exe上的文件版本是否随每次Delphi更新而更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM