如何检测特定的Delphi构建?

如何检测特定的Delphi构建?,delphi,version-detection,Delphi,Version Detection,这是相关的,但仍然不同 我正在寻找一种方法来检测编译代码的Delphi编译器的service pack(或内部版本号)。这本书很好,但没有告诉我确切的版本。(我也不能使用其中的支持定义,因为它们也与版本相关) 我需要这个,因为旧版本中存在一些bug(在本例中为a),这些bug在以后的service pack(在本例中为Delphi 2009 service pack 3)中修复 目前我的代码中有各种检查,如下所示: {$IFDEF BUG_QC_68123} 但我不能在我的主要文件中这样说: {

这是相关的,但仍然不同

我正在寻找一种方法来检测编译代码的Delphi编译器的service pack(或内部版本号)。这本书很好,但没有告诉我确切的版本。(我也不能使用其中的支持定义,因为它们也与版本相关)

我需要这个,因为旧版本中存在一些bug(在本例中为a),这些bug在以后的service pack(在本例中为Delphi 2009 service pack 3)中修复

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

{$IFDEF BUG_QC_68123}

但我不能在我的主要文件中这样说:

{$IFDEF DELPHI2009_UP}
  {$DEFINE BUG_QC_68123}
{$ENDIF}
…因为这将忽略D2009SP3和更高版本不再存在此错误的事实

有什么想法吗


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

不幸的是,System.pas中的RTLVersion等常量不会在更新中更新,但我认为如果有人想为其创建QC条目,这将是一个很好的建议

如果您测试的bug可以在代码中重现,那么您可以在启动时测试它们,并设置自己的全局标志


我通过确保始终应用最新的更新来避免这些差异。我还没有遇到过更新不稳定并迫使我回滚的情况。至少不适用于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
您不能检查不同的版本号


和对于好奇的Vel10-Vr70,Turbo Pascal版本,Vel110是C++ Builder版本。

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

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


下一个最好的替代方法是假设没有应用任何更新进行编写。也就是说,编写代码时,就好像所有已知的bug仍然存在一样。缺点是,您的代码可能不会像其他方式那样运行良好,因此,通过升级做正确事情的每个人都会受到惩罚,因为他们会继续使用您的次优代码。

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

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


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

VER190=Delphi.NET 2007。VER200=德尔福2009。CIL=Delphi.NET