重新编译修改后的 VCL 单元
Recompile modified VCL unit
我必须使用更改后的 VCL 单元来编译我的项目。我使用 Delphi XE8。我将 Vcl.StdCtrls.pas 从 D:\Program Files (x86)\Embarcadero\Studio.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',
...
// 没用
这似乎是一个错误。我猜你正在使用运行时包。在 XE7 中,这样的项目将不会编译——这是正确的行为。在 XE8 中它编译,显然使用 VCL 运行时包并忽略你修改的单元。
编辑:
请注意,即使在以前的 Delphi 版本中,在使用运行时包的同时修改 VCL 单元仍然需要您重新打包修改后的包及其依赖项(在本例中为 vcl 和 rtl)。
换句话说,您不能简单地使用修改后的单元,同时 linking 针对包含该单元的另一个副本的运行时包。单元名称在项目的整个范围内必须是唯一的,包括主要可执行文件和所有 linked 运行时包。
所以您的解决方案是:
- 不使用运行时包,或者
- 将所有必需的单元重新打包到您自己的运行时包中,并link针对它们而不是 Embarcadero 提供的 rtl、vcl 等
我必须使用更改后的 VCL 单元来编译我的项目。我使用 Delphi XE8。我将 Vcl.StdCtrls.pas 从 D:\Program Files (x86)\Embarcadero\Studio.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',
...
// 没用
这似乎是一个错误。我猜你正在使用运行时包。在 XE7 中,这样的项目将不会编译——这是正确的行为。在 XE8 中它编译,显然使用 VCL 运行时包并忽略你修改的单元。
编辑:
请注意,即使在以前的 Delphi 版本中,在使用运行时包的同时修改 VCL 单元仍然需要您重新打包修改后的包及其依赖项(在本例中为 vcl 和 rtl)。 换句话说,您不能简单地使用修改后的单元,同时 linking 针对包含该单元的另一个副本的运行时包。单元名称在项目的整个范围内必须是唯一的,包括主要可执行文件和所有 linked 运行时包。
所以您的解决方案是:
- 不使用运行时包,或者
- 将所有必需的单元重新打包到您自己的运行时包中,并link针对它们而不是 Embarcadero 提供的 rtl、vcl 等