6

我使用自己的 .rc 文件生成自定义资源条目,包括版本信息。

我的 library.rc 文件是:

#include "app.rc.h"
VS_VERSION_INFO VERSIONINFO
FILEVERSION _FileVersion
PRODUCTVERSION _FileVersion
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS 0
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
BEGIN
  BLOCK "VarFileInfo"
  BEGIN
    VALUE "Translation", 0x0409, 1252
  END
  BLOCK "StringFileInfo"
  BEGIN
    BLOCK "040904E4"
    BEGIN
      VALUE "InternalName",       App_InternalName "\0"
      VALUE "CompanyName",        App_CompanyName "\0"
      VALUE "FileDescription",    App_ProductName "\0"
      VALUE "FileVersion",        _FileVersionStr "\0"
      VALUE "ProductName",        App_ProductName "\0"
      VALUE "ProductEdition",     App_ProductEdition "\0"
      VALUE "LegalCopyright",     "Copyright \251 " App_CompanyName "\0"
      VALUE "CompanyURL",         App_CompanyURL "\0"
      VALUE "ProductURL",         App_ProductURL "\0"
      VALUE "SupportURL",         App_SupportURL "\0"
      VALUE "AppRegistryPath",    App_RegistryPath "\0"
    END
  END
END

我通过 Project | 将 .rc 文件添加到包项目文件中。添加到项目。到目前为止,我的 package.dpk 文件是这样的:

package SQL.Alpha.resource.core;

{$R *.res}
{$R 'library.res'}
{$ALIGN 8}

package.dproj 文件有 RcCompile 条目:

<RcCompile Include="..\..\build\rc\library.rc">
    <Form>library.res</Form>
</RcCompile>

当我编译包时,一切看起来都很好,但它有一个警告:

[DCC Warning] W1056 Warning: Duplicate resource:  Type 16 (VERSIONINFO), ID 1; File library.res resource kept; file package.res resource discarded.

这是由于包本身会生成它自己的 package.res 文件,其中包含 MainIcon 和 VersionInfo 条目。并且 VersionInfo 与我自己的 VersionInfo 条目有冲突。

然后我尝试删除 dpk 文件中的 {$R *.res} :

package SQL.Alpha.resource.core;

{$R 'library.res'}
{$ALIGN 8}

重建项目,一切正常。警告消失了。

但是,手动删除 {$R *.res} 有一些副作用:

  1. 如果您尝试在包中添加新单元或在 Project | 中进行更改,Delphi IDE 将再次添加 {$R *.res} 选项...
  2. .dproj 文件中的所有 RcCompile 条目将被删除

我可以通过在 package.dpk 文件中再次删除 {$R *.res} 来容忍第一个副作用。

然而,第二个副作用是我无法控制的。package.dproj 中缺少的 RcCompile 将导致 rc 文件不再被 brcc32 编译。删除文件系统中的 .res 文件将导致编译错误。

有谁知道如何克服这个问题?谢谢你。

4

2 回答 2

5

在 Delphi XE2 中,您现在可以通过 Project | 删除 Delphi 包 (*.bpl) 的内置版本信息。选项。导航到“版本信息”包,并取消选中“在项目中包含版本信息”。

通过这样做,内置版本信息将不会在 *.res 文件中生成,因此不会显示编译器警告消息。您可以根据需要使用自定义的 *.rc 文件。

于 2011-09-24T03:14:11.653 回答
1

我很难让它工作,最后求助于使用构建事件。直接包含rc文件会很好。但是,如果您没有得到不同的答案,您可以将其添加到您的 Pre-Build 事件中:

brcc32 "$(PROJECTDIR)\version.rc"

然后只需将编译后的文件资源文件包含在 {$R version.res} 中。您不需要将 .rc 文件添加到项目中。

对于 VersionInfo 冲突,请查看项目选项以获取版本信息。顶部有一个用于“包含版本”信息的复选框。如果您取消选中您可以将 {$R *.res} 保留在原处而不会发生冲突。

于 2011-03-22T06:25:14.920 回答