Les ressources d'un exécutable sous Windows en langage C/C++

[Dal] Messages postés 6086 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 8 juin 2023 - 30 mai 2022 à 01:28
Note : jah5577 est l'auteur d'origine de l'astuce.


1. Principe

Sous Windows, il est possible d'inclure dans un fichier .exe des fichiers utilisés par le programme.

Concrètement, cela consiste à stocker des images, des fonds, des curseurs, des dll ou même un autre programme dans le binaire du programme, au lieu de placer ces éléments dans le même dossier ou un sous-dossier du programme.

Cela aura pour conséquence de rendre plus clair le dossier où se situe le programme, mais cela alourdira inévitablement l'exécutable, car il embarque les ressources qu'il utilise.

Dans les phases de développement, vous pouvez éventuellement mettre au point votre programme de façon classique, sans utiliser le mécanisme de ressources, et n'utiliserce mécanisme que lorsque votre prigramme est finalisé et prêt à être déployé.

2. Utilisation

2.1 Utilisation normale

Pour utiliser les ressources avec le langage C/C++, il faut créer un fichier d'extension ".rc", et le placer dans le même dossier que les autres fichiers du projet.

Exemple : contenu dossier "jeu" avec codeblocks :
  • Fichiers sources
    • main.c
    • functions.c
  • Fichiers headers
    • headers.h
    • globalesVar.h
  • Fichier ressources
    • res.rc
  • Autres
    • jeu.layout
    • jeu.depend
    • jeu.cdp



Le fichier se trouve donc dans le même dossier que les autres fichiers.

Dans un fichier ressource, il doit y avoir un seul fichier joint par ligne, et une ligne doit commencer par un numéro.

Exemple :
ICON "icone.ico"
RCDATA "autreProgramme.exe"



Attention : Si un fichier se trouve dans un sous-dossier, il faut indiquer ce sous-dossier :
1 ICON "icones/icone.ico"

2.2 Utilisation avec Qt

L'utilisation des ressources est aussi possible avec Qt, qui est un environnement C++.

Ici, le principe n'est pas le même. Les ressources ne se trouveront pas dans un fichier avec pour extension ".rc", mais avec une extension ".qrc".

Il doit être indiqué au fichier ".pro" dans la partie #Input, de cette manière :

#input

RESOURCES += res.qrc



Voici la structure que doit avoir votre fichier ".qrc" :
<RCC>
<qresource>
<file>icone.ico</file>
<file>saveIcone.ico</file>
<file>quitterIcone.ico</file>
</qresource>
</RCC>


Cela se rapproche de la syntaxe du langage HTML. Les fichiers à intégrer se trouvent entre les balises "<file>" et "</file>".

3. Mots-clés

La liste des mots-clés des fichiers ressources se trouve dans la documentation en ligne de Microsoft, https://docs.microsoft.com/en-us/windows/win32/menurc/resource-definition-statements .

Merci à ozox pour cette astuce.