这是我对你做了什么简介:
- 您正在开发一个包装项目。
- 您已使用资源和图像对话框从项目菜单中向项目添加了一些文件。
- 您已将行
{$R Project.dres}
添加到包中包含的其中一个单元。
编译器然后在链接时报告已经要求链接该文件的多个副本Project.dres
。编译器不会执行此操作并丢弃其中一个编译的资源文件。
理解这一点的关键可以在你的包的主文件,.dpk文件中找到。它看起来是这样的:
package Package1;
{$R *.res}
{$R *.dres}
....
当您使用的IDE对话框中的IDE存储在项目文件中的信息,.dproj文件资源和图像,并且还增加了{$R *.dres}
到主项目源文件。这就是上面可以看到的那条线。 $R
指令中的*
指示编译器使用与出现$R
指令的文件相同的基本名称。
所以这就是你最终得到多个引用到同一个.dres文件。编译器将.dpk文件中的{$R *.dres}
扩展为Project.dres
并将其链接。
最自然的解决方案是从.pas
源单元中删除它出现的{$R Project.dres}
。
但是,将源文件放入源文件的原因可能是您在其他项目中使用了源文件,并且希望它独立运行。源文件包含加载资源的代码,确保每当项目包含此源文件时,它都包含资源。一个$R
指令将做到这一点。但这与使用IDE的资源和图像对话框不兼容。该IDE机制依赖于将信息保存到.dproj文件,并且是一个以项目为中心的机制。
所以,你想要的源文件的.pas这里包括$R
指令是做什么:
- 取下资源和图像对话框中的所有项目。
- 确保在任何源文件中都没有对
.dres
文件的引用,包括.dpk和.dpr文件。
- 创建一个.rc资源脚本文件,列出您希望包含的资源。
- 要求编译器编译资源脚本,并通过包括这个指令在.PAS源文件链接它:
{$R images.res images.rc}
显然我刚刚发明了一个文件名存在,但毫无疑问你会捡东西适当。
我已经找到了回应的起点。在.dpk中我有“* .res”和“* .dres”。如果我删除它,我不会收到警告。但是,在项目中,当我使用具有资源的组件时,我收到此消息“找不到资源” – Joc02 2014-10-21 15:00:03