embarquer des informations de version dans un prog Windows

embarquer des informations de version dans un prog Windows - C++ - Programmation

Marsh Posté le 14-12-2011 à 10:01:33    

Bonjour,
 
Je travaille sur une DLL écrite en C++ et produite avec Code::Blocks / MinGW. Elle doit à terme être distribuée avec un logiciel développé par un collègue.
J'aimerais pouvoir intégrer à cette DLL des informations de version afin de pouvoir contrôler la compatibilité avec le logiciel qui l'utilise.
 
J'ai pu voir que pour certaines DLL, en faisant un clic droit pour afficher les propriétés, on pouvait avoir un onglet "version". Comment peut-on arriver à ce résultat ?
 
La programmation sous Windows n'est pas mon fort, mais je dirais à première vue qu'il faut créer une fonction exportée dans la DLL, qui soit conforme à un certain prototype. C'est bien ça ? Et si oui, quel est le prototype de cette fonction ?


Message édité par shaoyin le 15-12-2011 à 08:08:03
Reply

Marsh Posté le 14-12-2011 à 10:01:33   

Reply

Marsh Posté le 14-12-2011 à 10:27:31    

Voir http://msdn.microsoft.com/en-us/li [...] s.85).aspx
 
Il faut juste créer une "resource" de type VERSIONINFO
Voir http://msdn.microsoft.com/en-us/li [...] s.85).aspx
 
Je ne sais pas si Codeblock possède un éditeur de ressources, mais vous avez probablement déjà utilisé des fichiers de "resources" et savez comment les créer.
 


Message édité par olivthill le 14-12-2011 à 10:41:25
Reply

Marsh Posté le 14-12-2011 à 10:51:13    

Merci olivthill ! C'est exactement ce que je cherchais.
 
Donc si j'ai bien compris, les versions sont embarquées sous forme de ressources dans le binaire. C'est encore plus simple que je ne pensais.
Encore merci !

Reply

Marsh Posté le 15-12-2011 à 08:00:08    

Pour ceux qui seraient confrontés au même problème que moi (et qui auraient quelques problèmes avec la programmation sous Windows...), voici la procédure à suivre :
- ajouter un fichier vide au projet et le nommer en lui donnant une extension ".rc" => Code::Blocks l'identifie comme une ressource.
- dans ce fichier, coller et adapter le code suivant :

Code :
  1. #include <afxres.h>
  2. #define VER_FILEVERSION             0,0,1,0
  3. #define VER_FILEVERSION_STR         "00.00.01"
  4. #define VER_PRODUCTVERSION          0,0,1,0
  5. #define VER_PRODUCTVERSION_STR      "00.00.01"
  6. #define VER_COMPANYNAME_STR   "Ma boite à moi"
  7. #define VER_FILEDESCRIPTION_STR  "Mon blabla à moi sur mon fichier"
  8. #define VER_INTERNALNAME_STR  "Le nom de mon fichier à moi"
  9. #define VER_LEGALCOPYRIGHT_STR  "Copyright (C) à moi"
  10. #define VER_ORIGINALFILENAME_STR "Encore un nom de fichier à moi"
  11. #define VER_PRODUCTNAME_STR   "Mon produit à moi"
  12. #define VER_COMMENT_STR    "Un commentaire si on veut"
  13. #ifndef DEBUG
  14. #define VER_DEBUG                   0
  15. #else
  16. #define VER_DEBUG                   VS_FF_DEBUG
  17. #endif
  18. VS_VERSION_INFO VERSIONINFO
  19. FILEVERSION     VER_FILEVERSION
  20. PRODUCTVERSION  VER_PRODUCTVERSION
  21. FILEFLAGSMASK   VS_FFI_FILEFLAGSMASK
  22. FILEFLAGS       (VER_DEBUG)
  23. FILEOS          VOS__WINDOWS32
  24. FILETYPE        VFT_DLL
  25. FILESUBTYPE     VFT2_UNKNOWN
  26. BEGIN
  27.     BLOCK "StringFileInfo"
  28.     BEGIN
  29.         BLOCK "040904E4"
  30.         BEGIN
  31.             VALUE "CompanyName",     VER_COMPANYNAME_STR
  32.             VALUE "FileDescription", VER_FILEDESCRIPTION_STR
  33.             VALUE "FileVersion",     VER_FILEVERSION_STR
  34.             VALUE "InternalName",  VER_INTERNALNAME_STR
  35.             VALUE "LegalCopyright",  VER_LEGALCOPYRIGHT_STR
  36.             VALUE "OriginalFilename",  VER_ORIGINALFILENAME_STR
  37.             VALUE "ProductName",     VER_PRODUCTNAME_STR
  38.             VALUE "ProductVersion",   VER_PRODUCTVERSION_STR
  39.             VALUE "Comments",      VER_COMMENT_STR
  40.         END
  41.     END
  42.     BLOCK "VarFileInfo"
  43.     BEGIN
  44.         /* The following line should only be modified for localized versions.     */
  45.         /* It consists of any number of WORD,WORD pairs, with each pair           */
  46.         /* describing a language,codepage combination supported by the file.      */
  47.         /*                                                                        */
  48.         /* For example, a file might have values "0x409,1252" indicating that it  */
  49.         /* supports English language (0x409) in the Windows ANSI codepage (1252). */
  50.         VALUE "Translation", 0x40C, 1252
  51.     END
  52. END


 
Je me suis fait piéger par la compilation du fichier ressource, parce que je m'entêtais à vouloir le gérer moi-même avec un compilateur de ressources téléchargé pour l'occasion. En fait, Code::Blocks le fait tout seul à partir de l'outil "windres.exe" de MinGW, de la même façon qu'il compile les autres fichiers source. En cas de modification du fichier ".rc", celui-ci est automatiquement recompilé lors du build de l'application.


Message édité par shaoyin le 15-12-2011 à 08:01:03
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed