【发布时间】:2012-06-08 21:36:17
【问题描述】:
我想知道是否有人知道一种优雅的方法来确定给定(编译)DLL、EXE或BPL需要哪些BPL。
我不确定这是否可能只是简单地扫描二进制文件以查找对 .bpl 文件名的文本引用(这很容易出现误报 )。
理想情况下,我想返回一个TStringList,甚至是一个以逗号分隔的String,其中包含所有必需的.bpl 文件的名称。
【问题讨论】:
-
peganza.com/#PAL 在源代码上做这种事情,但我认为它不会读取 .exe 等。你可以检查一下。
-
在 IDE 没有任何线索的情况下,当 Y.BPL 已经隐式后台加载该 BPL 时,即使 IDE 也无法可靠地完成这项工作,否则我们不会得到“无法加载 X.BPL”那个东西正在加载。我也很想知道这个。
-
"DUMPBIN /imports" 可以完美可靠地做到这一点,所以这当然是可能的。但是,将输出返回到您的程序中并不符合您的优雅标准。
-
你可以尝试读取PE文件的
Import address Table,但它只会显示加载时的依赖关系; AFAIK 在不反汇编或执行应用程序的情况下不可能知道每个运行时依赖关系,如果应用程序正在运行,您可以使用带有 TH32CS_SNAPMODULE 标志的CreateToolhelp32Snapshot函数。 -
我猜你也可以在每个依赖的 DLL/BPL 上递归地执行一个 dumpbin /imports,以获得一个完整的递归列表。
标签: delphi packages bpl runtime-packages