独自の .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} を削除すると、いくつかの副作用があります。
- パッケージに新しいユニットを追加しようとしたり、プロジェクトで変更を加えたりしようとすると、Delphi IDE は {$R *.res} を再度追加します。オプション...
- .dproj ファイル内のすべての RcCompile エントリが削除されます
package.dpk ファイルで {$R *.res} を再度削除することで、最初の副作用を許容できます。
しかし、2番目の副作用は私の手に負えません。package.dproj に RcCompile がないと、rc ファイルが brcc32 によって再びコンパイルされなくなります。ファイル システムの .res ファイルを削除すると、これによりコンパイルでエラーが発生します。
この問題を克服する方法を知っている人はいますか? ありがとうございました。