Croquettes et alimentation bio pour chiens et chats, Freelance PHP, Annuaire Freelance, Création site web, Annuaire libertin, Création site Joomla, Noms de domaines anomymes avec Paypal, Générateur de noms de domaines, administration serveur Unix, Streaming vidéo

Développeur Web
depuis 1997

Accueil
Plan du site
Liens
Contact
Statistiques
~136 visites par jour
[
Développeurs
] [
Entreprises
] [
Utilisateurs
] [
A mon sujet
] [
Liens
] [
Galeries Photos
]
Bonjour , bonne visite
Recherche
 

Creation & hébergement de votre site Internet avec Redjuice.fr
 
RCVersion
English version at www.codeproject.com
Publié le mardi 29 avril 2003 00:00, par Bzc ToOn'S
popularité: 35 % - lu 15753 fois - aucun commentaires


Ce freeware est inspiré d'un autre utilitaire developpé par Srinivas Vaithianathan diponible sur Codeproject (Versioning of executables at build time). L'ayant complétement recodé il ne reste plus aucune ligne de code de l'outil original.

Snapshot - 44.9 ko

Introduction

EPUIS quelques années, j'utilise un fabuleux outil OpenSource nommé ClassBuilder de Jimmy Venema et disponible sur SourceForge.

From Sourceforge project page : ClassBuilder is freeware CASE tool targeted at the C++ developer, running on Win95/98/NT. It lets you create, manipulate and navigate classes, class relations, class members and class methods at a high level of abstraction trough a graphical user interface.

Pour chaque classe ClassBuilder génère deux fichiers source : un fichier entête (*.h) et un fichier pour le code lui-même (*.cpp). Il génère aussi un fichier d'entête principale (*.h) pour l'ensemble du modèle UML. Ce fichier, appelé Master Header File, inclus toutes les definitions de classe, les typedefs, constantes, macros, etc... Ce fichier contient aussi des constantes symboliques automatiquement mises à jour à chaque génération des sources.

Par exemple si le modèle de donnée se nomme 'model' the Master Header File contient les définitions de constantes suivantes.

#define MODEL_DATE      20030211
#define MODEL_TIME      193311
#define MODEL_VERSION   12

A chaque fois que l'interface de l'API change Classbuilder incrémente MODEL_VERSION et met à jour MODEL_DATE and MODEL_TIME.

Compilation du modéle de donnée

Afin d'utilser le modéle de donnée il est nécessaire de le compiler ! \1. Plusieurs options sont possibles :
-  le compiler directement avec le programme qui l'utilise (la pire des méthodes \1 ! !)
-  le compiler sous forme de librairie statique (*.lib) (bien souvent le plus simple)
-  le compiler sous forme de librairie dynamique (*.dll) (le plus élégant mais aussi le plus sportif !)
-  le compiler sous forme d'executable (*.exe) (souvent significatif d'une mauvaise abstration interface / metier / données)

Dans le cas ou il est compilé sous forme binaire (exe ou dll) l'assistant Visual Studio génère un fichier de définition de ressources (*.rc). Ce fichier contient la description des boîtes de dialogue, des icones, des bitmaps, etc... Il contient aussi la définition des informations de version du binaire produit.

fichier de définition de ressources (*.rc)

Here is the fragment of code in a Windows Resource File which describes the version information for RCVersion itself.
/////////////////////////////////////////////////////////////////////////////
//
// Version
//

VS_VERSION_INFO VERSIONINFO
FILEVERSION 1, 0, 0, 100
PRODUCTVERSION 1, 0, 0, 1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x9L
#else
FILEFLAGS 0x8L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
  BLOCK "StringFileInfo"
  BEGIN
      BLOCK "040904b0"
      BEGIN
          VALUE "Comments", "Modified by BZCToOn's"
          VALUE "CompanyName", "Syntheretix"
          VALUE "FileDescription", "rcversion MFC Application"
          VALUE "FileVersion", "1, 0, 0, 100"
          VALUE "InternalName", "rcversion"
          VALUE "LegalCopyright", "Copyleft (C) Bzc ToOn'S 2002"
          VALUE "OriginalFilename", "rcversion.EXE"
          VALUE "PrivateBuild", "RCVERSION-20030212_100"
          VALUE "ProductName", "rcversion Application"
          VALUE "ProductVersion", "1, 0, 0, 1"
      END
  END
  BLOCK "VarFileInfo"
  BEGIN
      VALUE "Translation", 0x409, 1200
  END
END

What RCVersion do ?

RCVersion parses both the Master Header File and the Resources File. Next, according to the information contained in these two files, it generates a file named version.h and updates the Resources File.

Output : version.h

Here is the output file produced by RCVersion for itself.

// Generated by RCVersion 1.0.0.1 build RCVERSION-20030212_100 (20030213-020245)
// Copyleft (C) Bzc ToOn'S 2002
// Generated on 13/02/2003 02:02:46 from resource file rcversion.rc
#define __SNAPSHOT__        "20030213-020246"
#define __FILEVERSION__     "1.0.0.100"
#define __PRODUCTVERSION__  "1.0.0.1"
#define __COMPANY__         "Syntheretix"
#define __PRODUCT__         "rcversion Application"
#define __DESCRIPTION__     "rcversion MFC Application"
#define __PRIVATEBUILD__    "RCVERSION-20030212_100"
#define __COPYRIGHT__       "Copyleft (C) Bzc ToOn'S 2002"

// Master Header Values (ClassBuilder)!!
#define __CB_DATE__         "20030212"
#define __CB_TIME__         "190244"
#define __CB_VERSION__      "100"

// Do Not Modify !!

Command line execution

rcversion [-q] [-i input]

-  (q) quiet : don't show the UI. This option is useful in Custom Build Step in Visual Studio
-  (i) input : specify the input file. The input file could be *.rc or *.h. The filename without extension will be used as data model name.

How to use RCVersion with Visual Studio

-  1. Add a file to project : version.h
-  2. Define Custom Build Step Command Line : rcversion -q -i $(TargetName)

Description : RCVersion

Output : version.h

Dependencies : $(TargetName).h

You can now put #include 'version.h' in '$(TargetName).h' or in 'stdafx.h'.

DON'T FORGET TO PUT RCVERSION IN PATH or TO SET VISUAL STUDIO EXECUTABLE PATH TO THE DIRECTORY WHERE RCVERSION IS INSTALLED

Features


-  Version number extraction from Classbuilder Master Header File
-  RC File version information editor
-  version.h generation
-  Optional RC file update
-  Backup of your old version.h and RC files
-  Preview of version.h and RC files
-  Edition of version.h and RC files (thought notepad \1
-  Non interactive execution

Bugs & limitation

I only tested RCVersion on my own projects. For me it runs fine. I hope for you too \1.

History

RCVERSION-20030212_100

-  First release

RCVERSION-20030214_200

-  version.h : Added #ifdef _DEBUG / #endif
-  version.h : better formatting
-  Added new field 'Symbols Prefix' to the symbolic constants
-  Added new command line option -p prefix to set the symbols prefix
-  Preview control is now a RichEdit one to support fixed width font

Fixed Bugs

-  RCFile parsing : If a control ID contains one of the VERSIONINFO directive (FILEVERSION, PRODUCTVERSION) the whole line is replaced and the whole RCFile is corrupted.
-  version.h : Bad date formatting (minutes were months).
-  Master Header parsing : now it can read symbolic constants separated by a tabulation char.


Documents liés
Pas de description !!
Zip - 124.3 ko
 
 
Sources de RCVersion
Zip - 22.7 ko
 
 
 

[ Imprimer cet article ] [ Haut ]
 

 
54.82.53.231 - 23:13:00 30/07/2014
Navigation

Contacts
      BzcToOn'S (Webmestre)
      Support

Dernier sondage
Que faîtes vous sur le net ? (plusieurs choix)
Je surfe et c'est déja pas mal !
Je suis infographiste
Je créé des sites en HTML
Je programme des sites en PHP
Je programme des sites en PHP Orienté Objet
Je programme en Javascript DOM
J'administre des serveurs Unix/Linux
J'administre des serveurs Windows
Je référence des sites web
Je suis salarié
Je suis freelance
Je code pour l'open source
 
 


This is my Google PageRank™ - SmE Rank free service Powered by Scriptme
Temps de génération de la page : 3.524 ms