6

我必须使用更改后的 VCL 单元来编译我的项目。我使用德尔福 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',
  ...

// 它没有帮助

4

1 回答 1

7

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

编辑:

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

因此,您的解决方案是:

  1. 不使用运行时包,或
  2. 将所有需要的单元重新打包到您自己的运行时包中,并链接到它们而不是 Embarcadero 提供的 rtl、vcl 等。
于 2015-05-26T13:46:04.407 回答