Supprimer {$ R * .res} dans le fichier package.dpk supprimera le rccompile dans le fichier .dproj

StackOverflow https://stackoverflow.com/questions/5386947

  •  28-10-2019
  •  | 
  •  

Question

J'utilise mon propre fichier .rc pour générer des entrées de ressources personnalisées, y compris des informations de version.

Mon fichier library.rc est:

#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

J'ajoute le fichier .rc dans le fichier de projet du package via Project | Ajouter au projet. Mon fichier package.dpk est quelque chose comme ça jusqu'à présent:

package SQL.Alpha.resource.core;

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

Le fichier package.dproj contient l'entrée RcCompile:

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

Quand je compile le paquet, tout semble bon mais il y a un avertissement:

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

Cela est dû au fait que le package lui-même génère son propre fichier package.res qui inclut les entrées MainIcon et VersionInfo. Et le VersionInfo est en conflit avec ma propre entrée VersionInfo.

Je tente ensuite de supprimer {$ R * .res} dans le fichier dpk:

package SQL.Alpha.resource.core;

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

Reconstruisez le projet et tout fonctionne correctement. L'avertissement est parti.

Cependant, il existe certains effets secondaires supprimant {$ R * .res} manuellement:

  1. Delphi IDE ajoutera à nouveau {$ R * .res} si vous essayez d'ajouter une nouvelle unité dans le package ou d'apporter des modifications dans Project | Options ...
  2. Toutes les entrées RcCompile du fichier .dproj seront supprimées

Je peux tolérer le premier effet secondaire en supprimant à nouveau {$ R * .res} dans le fichier package.dpk.

Cependant, le 2ème effet secondaire est hors de mon contrôle. Le RcCompile manquant dans package.dproj entraînera la recompilation du fichier rc par brcc32. La suppression des fichiers .res du système de fichiers entraînera une erreur de compilation à cause de cela.

Quelqu'un a-t-il des idées pour surmonter ce problème? Merci.

Était-ce utile?

La solution

Dans Delphi XE2, vous pouvez maintenant supprimer les informations de version intégrées du package Delphi (* .bpl) via Project |Options.Accédez au package "Informations sur la version" et décochez "Inclure les informations de version dans le projet".

En faisant cela, les informations de version intégrées ne seront pas générées dans les fichiers * .res et donc le message d'avertissement du compilateur ne s'affichera pas.Vous pouvez utiliser vos fichiers * .rc personnalisés à votre guise.

Autres conseils

I had trouble getting this to work and finally resorted to using build events. It would be nice to just include the rc file directly. But if you don't get a different answer that works you can add this to your Pre-Build event:

brcc32 "$(PROJECTDIR)\version.rc"

Then just include the compiled file resource file with {$R version.res}. You don't need to add the .rc file to the project.

For the VersionInfo conflict look at the project option for version information. There is a check box at the top for "Include Version" information. If you uncheck that you can leave the {$R *.res} in place with no conflict.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top