如何避免Delphi项目树中显示RTL单元Winapi.Windows.pas
问题原因
你将Winapi.Windows放在了DPK文件的contains段中,该段定义的是需要打包进当前包的单元,IDE会自动将这些单元识别为项目的组成部分展示在项目树中。Winapi.Windows属于RTL内置单元,无需打包进自定义包,仅需编译时引用即可。
解决方案
有两种实现方式,均可以实现设置PE标志的同时避免RTL单元出现在项目树中:
方案1:直接使用常量值(最简便)
IMAGE_FILE_NET_RUN_FROM_SWAP的固定值为$00000800,直接使用数值无需引用任何单元:
- 将
Winapi.Windows从contains段中删除 - 将PE标志设置指令修改为:
{$SetPEFlags $0800}
方案2:保留常量名可读性
如果需要保留常量名方便后续维护,仅需在编译指令前加局部uses引用,不要放在contains段中:
- 将
Winapi.Windows从contains段中删除 - 在
{$SetPEFlags}指令前添加一行uses Winapi.Windows;
修改后正确的DPK结构示例
requires rtl, { 其他你依赖的第三方/系统包 }; contains { 仅放置你自己开发的、需要打包进当前包的单元 }; // 仅编译时引用Winapi.Windows单元获取常量,不会打包单元进包 uses Winapi.Windows; {$SetPEFlags IMAGE_FILE_NET_RUN_FROM_SWAP} end.
后续操作
修改DPK保存后,执行以下操作清除缓存避免旧配置残留:
- 从项目组中删除原有DPK,重新添加修改后的DPK文件
- 右键项目树选择「刷新」,或删除项目目录下的
.dproj.local、.identcache缓存文件后重启IDE
内容的提问来源于stack exchange,提问作者Marina
相关产品推荐
相关产品推荐

