重新编译已修改的VCL单元

时间:2015-05-26 13:22:26

标签: delphi delphi-xe8

我必须使用更改的VCL单元编译我的项目。我使用的是Delphi XE8。我将Vcl.StdCtrls.pas从D:\ Program Files(x86)\ Embarcadero \ Studio \ 16.0 \ source \ vcl复制到我的.dpr文件所在的项目文件夹,然后我更改了我的Vcl.StdCtrls.pas副本。我还将此单元添加到项目树中。问题是,使用Delphi XE8这种重新编译VCL单元的方法不再有效。我在修改后的Vcl.StdCtrls.pas单元中添加了明显的语法错误。编译器不报告错误,这意味着它甚至没有检查文件。我总是做一个完整的构建Shift + F9。我发现了类似的问题How to recompile a specific unit from the VCL?,但就像我说的那样,它不再适用,不适用于Delphi XE8。

此外,修改后的单元位于.dpr文件中的使用列表中:

uses
  Vcl.StdCtrls in 'D:\Dev\MYPROJECT\Vcl.StdCtrls.pas',
  ...

//没有帮助

1 个答案:

答案 0 :(得分:7)

这似乎是一个错误。我猜你正在使用运行时包。在XE7中,这样的项目不会编译 - 这是正确的行为。在XE8中,它编译,显然使用VCL运行时包并忽略您修改的单元。

编辑:

请注意,即使在以前的Delphi版本中,在使用运行时包时修改VCL单元仍然需要重新打包修改后的包及其依赖项(在本例中为vcl和rtl)。 换句话说,在链接包含该单元的另一个副本的运行时包时,不能简单地使用修改的单元。单元名称在项目的整个范围内必须是唯一的,包括主可执行文件和所有链接的运行时包。

所以你的解决方案是:

  1. 不使用运行时包,或
  2. 将所有必需的单元重新打包到您自己的运行时包中,并链接它们而不是Embarcadero提供的rtl,vcl等。