这与another Delphi-version question有关但仍然不同;
我正在寻找一种方法来检测编译我的代码的Delphi编译器的service-pack(或内部版本号)。 jedi.inc很不错,但它并没有告诉我确切的版本。 (我也不能在那里使用SUPPORTS_ *定义,因为那些也与版本相关)
我需要这个,因为旧版本中存在一些错误(在这种情况下,它是_ValLong bug in Delphi 2009),这些错误已在以后的Service Pack中修复(在本例中为Delphi 2009 service pack 3)。
目前我的代码中有各种各样的检查,例如:
{$ IFDEF BUG_QC_68123}
但我不能在我的主要包含文件中说出这个:
{$IFDEF DELPHI2009_UP}
{$DEFINE BUG_QC_68123}
{$ENDIF}
......因为这会错过D2009SP3及更高版本不再存在此错误的事实。
有什么想法吗?
PS:这可能也适用于较旧的(和较新的)Delphi版本,因此我认为任何图书馆和/或组件供应商都会对此感兴趣。
答案 0 :(得分:5)
为每个版本定义符号:
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 ++构建器版本。
答案 1 :(得分:3)
不幸的是,像System.pas中的RTLVersion这样的常量在更新中没有更新,但我认为如果有人想为它制作一个QC条目,这将是一个很好的建议。
如果您正在测试的错误在代码中重现是可行的,您可以在启动时测试它们并设置自己的全局标记。
我通过确保始终应用最新更新来解决这些差异。我还没有遇到一个更新不稳定的情况,并迫使我回滚。至少不是Delphi。
答案 2 :(得分:1)
编译器不会公开该信息。它只会告诉您主要版本,在应用更新时不会更改。
我认为您可以做的最好是始终为最新更新编写代码。假设您的代码的使用者也将拥有最新的更新。如果他们不这样做,那么这是他们自己的错,而不是你需要担心的问题。在您的系统要求中提及它。当然,你的代码对他们不起作用,但其他人也不会这样做,因为他们仍在使用已知错误的代码。
下一个最佳选择是假设已应用 no 更新。也就是说,编写代码就好像所有已知错误仍然存在一样。缺点是您的代码可能无法运行,因此通过升级做出正确事情的每个人都会因为继续使用您的次优代码而受到惩罚。
答案 3 :(得分:1)
您可以尝试在软件中包含编译器文件版本。例如,DCC32.exe上有一个文件版本,您可以通过编程方式获取该文件,然后将其作为const写入单元。这可以作为构建过程的一部分来完成,以便在构建应用程序之前获取版本信息(使用FinalBuilder之类的内容非常容易)。
我已经为其他事情做了这个,所以在我们的关于屏幕上我们可以得到各种有用的信息。此外,当我们的应用程序中出现错误时,我们可以将此信息捆绑到我们的EurekaLog错误报告中。
但是我不知道DCC32.exe上的文件版本是否随每次Delphi更新而更新。