如何查看 .dcu 是使用哪个 Delphi 版本编译的?

How can I see which Delphi version a .dcu was compiled with?

如果我有一些.dcu文件;我怎样才能知道它们是用哪个 Delphi 版本编译的?

我收到了一些旧的源代码,其中包含一些.dcu 文件,但我无法访问原始源代码。我想重构这个库,但为此我只想让它先在原始 Delphi 版本中编译。


顺便说一句,编译器在这里可能会更有帮助。 它指出文件 X 是使用 "different" 版本编译的,但没有说明是哪个版本......

DCU 文件是 Borland(现在的 Embarcadero)开发的专有格式,作为编译代码和源代码之间的中间数据。这也是Delphi编译器生成可执行文件如此之快的主要原因。有关此格式的信息有意稀少。 Borland 没有提供有关它的文档,Embarcadero 似乎遵循相同的路径。 有一个名为 "DeDe" 的实用程序可以反汇编由旧 Delphi 版本创建的编译文件,并提供有关这些文件的一些信息,包括 dcu 文件版本。 它不适用于 Delphi 版本 5 以上的编译器生成的二进制文件,但包含源代码,也许可以改进。

从非官方来源,查看 .dcu 文件的第 4 个字节

[=10=]F = Delphi 7
 = Delphi 2005
 = Delphi 2006 or 2007
 = Delphi 2009
 = Delphi 2010
 = Delphi XE
 = Delphi XE2
 = Delphi XE3
 = Delphi XE4
A = Delphi XE5
B = Delphi XE6
C = Delphi XE7
D = Delphi XE8
E = Delphi 10 Seattle
F = Delphi 10.1 Berlin
 = Delphi 10.2
 = Delphi 10.3
 = Delphi 10.4

从 Delphi 2006 到 Delphi 2007,.dcu 格式没有变化。因此他们使用相同的格式。

2016 年 7 月 2 日编辑 已将 XE8、10 和 10.1 添加到列表中。

根据要求,还有目标平台,可在 .dcu 的第二个字节中找到。值当然仅对具有这些目标的版本有效。

 = Win32
 = Win64
 = Osx32
 = iOS emulator
 = iOS device
 = Android

如果您认为有误,请告诉我。

在寻找答案的过程中,我 运行 进入了 Alexei Hmelnov 的一个很棒的在线工具。

它可以让你上传一个 .dcu 文件,它会给你非常详细的信息。

http://geos.icc.ru:8080/scripts/WWWBinV.dll

它显示了使用的编译器、编译时间、使用的单元等