【问题标题】:How can I see which Delphi version a .dcu was compiled with?如何查看 .dcu 是用哪个 Delphi 版本编译的?
【发布时间】:2015-04-21 12:20:14
【问题描述】:

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

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


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

【问题讨论】:

标签: delphi dcu


【解决方案1】:

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

【讨论】:

  • (我不是在否决您的问题,只是一个注释。)您可以在类似的问题中找到What is a Delphi DCU file? 的信息,并且 DeDe 已经过时(Delphi 5 大约在 15 年前发布),所以它是否可以改进是非常值得商榷的,因为从那时起.DCU格式可能已经发生了巨大的变化。
  • 什么辩论? Delphi 5 可用于读取和写入文件,因此可用于改进读取文件和写出另一个文件的程序。
【解决方案2】:

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

$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

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

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

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

$03 = Win32
$23 = Win64
$04 = Osx32
$14 = iOS emulator
$76 = iOS device
$77 = Android

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

【讨论】:

  • 这些值不映射到compiler version?(除以十)。即 XE = 220 = $16 *10
  • @whosrdaddy 是的,对于显示的那些,可能还有一些更早的。 Delphi 1 .dcu 将“DCU1”作为前四个字节,我不知道他们什么时候改变了这种做法,D2?还是 D3?还是 4、5、6?
  • 谢谢,这是有用的信息。如果您有兴趣从 .dcu 文件中获取信息,请务必查看我在此处的答案中链接到的工具。这很酷。
【解决方案3】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    相关资源
    最近更新 更多