如何检测特定的Delphi版本?

问题描述:

这与another Delphi-version question有关,但仍然不同;如何检测特定的Delphi版本?

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

我需要这个,因为一些bug在旧版本中存在(在这种情况下,它是一个_ValLong bug in Delphi 2009)一个更高版本的服务包(在这种情况下为Delphi 2009服务包3)。

目前,我有各种检查在我的代码,像这样:

{$ IFDEF BUG_QC_68123}

但我不能说这在我的主要包括文件:

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

...因为这会错过D2009SP3和更高版本不再有这个错误的事实。

任何想法? PS:这可能也适用于Delphi的旧版本(和更新版本),所以任何库和/或组件供应商都会对此感兴趣,我猜想。

你可以尝试,包括软件编译器文件版本。例如,DCC32.exe上有一个文件版本,可以通过编程获取,然后以const的形式写入单元。这可以作为构建过程的一部分来完成,因此在构建应用程序之前它会获取版本信息(这对于类似FinalBuilder的事情很容易)。

我已经做到了这一点其他的东西,使我们关于屏幕上我们可以得到有用的信息各个位。另外,当我们的应用程序出现错误时,我们可以将此信息捆绑到我们的EurekaLog错误报告中。

但是我不知道是否在DCC32.exe的文件版本与每德尔福更新而更新。

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

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

我通过确保始终应用最新更新来解决这些差异。我还没有遇到一个案例,那里的更新是不稳定的,迫使我把它推回去。至少不用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 

Source Another source 不能检查不同的版本号。

而好奇的是,VER10-VER70在Turbo Pascal版本中,VER110是C++ builder版本。

+0

VER190 = Delphi.NET 2007 VER200 = 2009的Delphi CIL = Delphi.NET – 2009-07-09 20:48:57

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

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

下一个最佳选择是编写假设已应用更新。也就是说,编写代码就好像所有已知的错误仍然存​​在。缺点是你的代码可能无法正常运行,所以每个通过升级来做正确事情的人都会因为继续拥有不理想的代码而受到惩罚。