如何从VCL中重新编译特定的单元?

9

我希望能够将一个 QC 中的修复程序应用到 Delphi 2009 的一个单元里(碰巧是 DBClient)。我知道需要将该单元复制到另一个目录中,并对其进行更改。那么,我该如何让 Delphi 编译该单元并使用它来代替已经存在的 DCU 呢?

3个回答

16

如果不想修改原始的.Pas文件,那么可以通过将.Pas文件复制到应用程序文件夹中来实现。然后选择“构建项目”,它会在我的应用程序文件夹中创建新的dcu文件,该文件将代替原始文件。


15
请注意,如果其他VCL单元依赖于已更改的单元,则此方法将无效,这种情况下它们也需要重新编译。否则,应用程序链接将失败。 - mghie
2
如果您使用运行时包,它将无法正常工作,请注意使用“使用调试 DCU”。 - Lars Truijens

3
这种方法算是最后的办法(CodeGear不支持),但在必要时我会像Mohammed一样做类似的事情。不过,我不会把任何修改过的单元放到应用程序文件夹中,而是将它们放到自己的文件夹中,与我的库代码一起,并将此文件夹包含在我的库路径中,这样所有项目都会使用它。这也防止我拥有多个(可能略有不同的)副本。
我还会仔细检查任何更新,以了解有哪些更改,这样我就可以删除修改过的单元或重新应用更改到来自CodeGear的更新(并且可能更好的)单元。

-1

我自己从未这样做过,但在 {RAD}\source\rtl 中有一些项目及批处理构建脚本。我相信这使得重新编译 RTL 函数变得容易。其他单元应该更容易重新编译。

如果您想要进行的更改是局部的,且这些单元并不被其他 RTL/VCL 单元广泛使用,则最简单的方法是将修改后的单元副本放在其标准位置之外。

另一个选择是运行时修补(也称为 detouring)。


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