我该如何查看一个 .dcu 文件是用哪个 Delphi 版本编译的?

13

如果我有一些.dcu文件,如何找出它们是用哪个Delphi版本编译的?

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


顺便说一句,编译器可能会更有帮助。 它指出文件X是用“不同”的版本编译的,却没有说明是哪个版本.....


你能提供完整的编译器错误信息吗? - Igor
不应该说“一个不同的版本”,而应该说类似于“Delphi XE6 / Win64”。当然,编译器无法知道更新的版本,但至少它可以检测到使用了更新或未知的版本,并报告。 - Wouter van Nifterick
3个回答

23
从非官方渠道获取信息,查看.dcu文件的第四个字节。
$0F = Delphi 7
$11 = Delphi 2005
$12 = Delphi 2006 or 2007
$14 = Delphi 2009
$15 = Delphi 2010
$16 = Delphi XE
$17 = Delphi XE2
$18 = Delphi XE3
$19 = Delphi XE4
$1A = Delphi XE5
$1B = Delphi XE6
$1C = Delphi XE7
$1D = Delphi XE8
$1E = Delphi 10 Seattle
$1F = Delphi 10.1 Berlin
$20 = Delphi 10.2
$21 = Delphi 10.3
$22 = Delphi 10.4
$23 = Delphi 11

从Delphi 2006到Delphi 2007,.dcu格式没有任何变化。因此它们使用相同的格式。 编辑于2016年7月2日,将XE8、10和10.1添加到列表中。
根据要求,还有目标平台,可以在.dcu的第二个字节中找到。当然,这些值只对具有这些目标的版本有效。
$03 = Win32
$23 = Win64
$04 = Osx32
$14 = iOS emulator
$76 = iOS device
$77 = Android

如果你觉得有错误,请告诉我。

这些值不是映射到编译器版本(除以十)吗?例如XE = 220 = $16 * 10。 - whosrdaddy
@whosrdaddy 是的,对于展示的那些和可能一些早期版本。Delphi 1的.dcu文件前四个字节是“DCU1”,我不知道他们什么时候改变了这个做法,是D2?还是D3?或者4、5、6? - Tom Brunberg
谢谢,这是有用的信息。如果你有兴趣从.dcu文件中获取信息,请务必查看我在这里回答中提供链接的工具。它非常棒。 - Wouter van Nifterick

5

在寻找答案时,我遇到了 Alexei Hmelnov 制作的一个很棒的在线工具。

它可以让你上传一个 .dcu 文件,并提供极其详细的信息。

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

它会显示所使用的编译器、编译时间、使用的单元等信息。


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

我没有给你的问题投反对票,只是提醒一下。你可以在类似的问题中找到关于Delphi DCU文件的信息(https://dev59.com/QmAf5IYBdhLWcg3wbCN3?rq=1),而DeDe已经过时了(Delphi 5发布已有约15年之久),因此它是否“可以改进”存在很大争议,因为.DCU格式可能已经发生了巨大变化。 - Ken White
什么争论?Delphi 5可以用于读取和写入文件,因此它可以用于改进读取文件并写出另一个文件的程序。 - Paul McCarthy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接