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.

これは、パッケージ自体が MainIcon および VersionInfo エントリを含む独自の package.res ファイルを生成するためです。また、VersionInfo は、自分の VersionInfo エントリと競合しています。

次に、dpk ファイルの {$R *.res} を削除しようとします。

package SQL.Alpha.resource.core;

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

プロジェクトを再構築すると、すべて正常に動作します。警告はなくなりました。

ただし、手動で {$R *.res} を削除すると、いくつかの副作用があります。

  1. パッケージに新しいユニットを追加しようとしたり、プロジェクトで変更を加えたりしようとすると、Delphi IDE は {$R *.res} を再度追加します。オプション...
  2. .dproj ファイル内のすべての RcCompile エントリが削除されます

package.dpk ファイルで {$R *.res} を再度削除することで、最初の副作用を許容できます。

しかし、2番目の副作用は私の手に負えません。package.dproj に RcCompile がないと、rc ファイルが brcc32 によって再びコンパイルされなくなります。ファイル システムの .res ファイルを削除すると、これによりコンパイルでエラーが発生します。

この問題を克服する方法を知っている人はいますか? ありがとうございました。

4

2 に答える 2

5

Delphi XE2 では、Delphi パッケージ (*.bpl) のビルトイン バージョン情報を Project | 経由で削除できるようになりました。オプション。「バージョン情報」パッケージに移動し、「プロジェクトにバージョン情報を含める」のチェックを外します。

これにより、組み込みのバージョン情報が *.res ファイルに生成されなくなり、コンパイラの警告メッセージが表示されなくなります。カスタマイズした *.rc ファイルを必要に応じて使用できます。

于 2011-09-24T03:14:11.653 に答える
1

これを機能させるのに苦労し、最終的にビルドイベントを使用することにしました。rc ファイルを直接インクルードするだけでよいでしょう。しかし、うまくいく別の答えが得られない場合は、これをビルド前イベントに追加できます。

brcc32 "$(PROJECTDIR)\version.rc"

次に、コンパイルされたファイル リソース ファイルを {$R version.res} に含めます。プロジェクトに .rc ファイルを追加する必要はありません。

VersionInfo の競合については、バージョン情報のプロジェクト オプションを参照してください。「バージョンを含める」情報の上部にチェックボックスがあります。{$R *.res} を競合せずにそのままにしておくことができることをオフにすると。

于 2011-03-22T06:25:14.920 に答える