CPR Informatique
Visual C++
Prise en main
Tables des matières
1. – LES MFC (MICROSOFT FOUNDATION CLASSES) ..3
1.2 – L’ESPACE DE TRAVAIL 3 2. – CRÉER UN NOUVEAU PROJET .5
2.1 – ETAPE 1 : CHOISIR LE TYPE ET LE NOM DU PROJET .5 2.2 – ETAPE 2 : CHOISIR LE TYPE DE L’APPLICATION 6 2.3 – ETAPE 3 : COMPILATION ET ÉDITION DE LIENS .8 2.4 – ETAPE 4 : EXÉCUTION DU PROGRAMME 9
3. – ENRICHIR UN PROJET ..10
4.
5. – OUVRIR UN PROJET EXISTANT 18
5. –
6. – LES PRINCIPALES FONCTIONNALITÉS DU DÉBOGU
6.1 – LE MENU « DEBUG » 22 6.2 - INSERTION DE POINTS D’ARRÊT ..23 6.3 - L’EXÉCUTION DU PROGRAMME EN MODE “PAS À PAS” ..24 6.4 - VÉRIFICATION DE LA VALEUR DES VARIABLES ..26
Les MFC constituent un ensemble de classes prédéfinies autour desquelles s’articule la programmation Windows avec Visual C++. L’écriture d’un programme Windows entraîne la création et l’utilisation d’objets des MFC ou d’objets de classes dérivées des MFC. Visual C++ met à la disposition du programmeur des outils spécialisés facilitant considérablement l’utilisation des
Lorsque l’on crée un projet, Visual C++ définit un espace de travail associé et y enregistre les informations nécessaires à la gestion du projet
Un environnement intégré contient un éditeur de texte, un compilateur, un éditeur de liens, un éditeur de ressources, un débogueur et quelques outils (création de bitmap et d’icônes).
A l’ouverture de Visual C++, l’espace de travail est constitué de trois fenêtres principales (Cf. figu
La fenêtre de la gestion du projet permet le déplacement au sein des classes et dans les fichiers du programme ;
<La fenêtre des résultats affiche les messages générés par la compilation et l’édition de liens.
Pour créer un nouveau projet, aller dans le
Il e
Les deux options principales sont :
Win32 Console Ap
MFC AppWizard (.exe). Cette option est intéressante pour construire des applications graphiques complexes (interfaces homme-machine). Elle permet d’utiliser des bibliothèques graphiques de haut niveau, les MFC (Microsoft Foundation Classes), ce qui simplifie considérablement la tâche du programmeur pour toutes les parties graphiques et la gestion des événements (souris, clavier …). La lecture du code généré par cette option demande une connaissance approfondie de la programmation Windows et des MFC. Nous n’en parlerons pas dans ce document.
Après avoir choisi le type du projet (Win32 Console Application), entrer le nom du projet et choisir le répertoire de travail (Cf. figure 2).
L’étape suivante permet de choisir le type d’application désirée. Nous avons le choix entre trois options :
“An empty project” : c’est la seule option qui ne génère rien (aucun code source, aucun fichier) ;
“A simple application” génére uniquement le code (vide) de la fonction principale du programme (“main”) dans un fichier “” ;
“A “Hello Word” application” ajoute une ligne de code dans la fonction main pour l’affichage de la chaîne de caractère “Hello Word” à l’écran (option choisie pour notre exemple).
Cliquer sur le bouton Finish pour générer le projet.
figure 3 – Création d’un nouveau projet : étape 2
On note l’inclusion par Visual C++ du fichier stdafx.h. Ce fichier est obligatoire pour la construction du projet (Cf. figure 5). Tous les#include <fichier.h> doivent impérativement être déclarés après ce fichier système.
On construit le projet en cliquant sur l’icône « build » de la barre de menu (Cf. figure 6). Dans notre exemple, nous avons modifié le code source généré avant la construction du projet (remplacement de la fonction C printf par la fonction C++ cout et inclusion du fichier iostream.h contenant cette fonction).
Une fois la compilation et l’édition de liens terminées avec succès (messages dans la fenêtre des résultats), on peut exécuter le programme en cliquant sur l’icône « Execute Program » (Cf. figure 7).
Le résultat de l’exécution (affichage de la chaîne de caractères “Hello World “ à l’écran) apparaît dans une fenêtre MS-DOS (Cf. figure 8).
figure 8 – Résultat de l’exécution du programme
L’ajout d’une structure n’est possible que manuellement (contrairement à l’ajout d’une classe – Cf. chapitre 3.2). L’environnement Visual C++ prend en compte la syntaxe utilisant la redéfinition d’une structure (typedef struct). Néanmoins, lors de la mise à jour de la hiérarchie des classes, l’environnement conserve le nom de la structure et pas le nom de la structure redéfinie (Cf. figure 9).
Il existe deux possibilités pour ajouter une classe à un projet : éditer le fichier source « .cpp » dans lequel on désire ajouter la classe et écrire le code manuellement ;
utiliser le générateur automatique de code source intégré dans Visual C++.
Pour la génération automatique (Cf. figure 10) :
Cliquer sur l’onglet ClassView ;
Cliquer sur New Class ;
Entrer le nom de la classe et éventuellement le nom de la (ou des) classe(s) mère(s) (derived class – Cf. figure 11).
figure11 – Caractéristiques de la classe à ajouter au projet
Visual C++ génère le code de la classe dans un fichier « nom-classe.h ». Notons qu’il génère automatiquement les prototypes du constructeur par défaut et du destructeur dans le code de la classe (Cf – figure 12).
Il génère également un fichier « » contenant le corps du constructeur par défaut et du destructeur (à remplir par le programmeur - Cf – figure 13).
figure 12 – Génération automatique du code de la classe
figure 13 – Génération automatique du code du constructeur par défaut et du destructeur
Comme pour l’ajout d’une classe à un projet, il existe deux manières d’ajouter une méthode à une classe : écrire manuellement le code de la méthode ou utiliser l’outil de génération automatique. Notons que si on ajoute manuellement le prototype d’une méthode dans la définition de la classe (fichier .h), la mise à jour de la hiérarchie des classes (ClassView) s’effectue automatiquement.
Pour la génération automatique (Cf. figure 14) :
Sélectionner la classe ;
Cliquer sur le bouton droit de la souris pour obtenir le menu contextuel ; Cliquer sur « Add Member Fonction ».
figure 14 – Ajout d’une méthode à une classe (génération automatique)
Entrer le type de retour et le nom de la fonction ainsi que les éventuels paramètres de la fonctions (chaque pramètre doit être précédé de son type – Cf. figure 15) ; Définir le type d’accès (public, protected ou private - Cf. figure 16).
figure 15 – Caractéristiques de la méthode à ajouter à la classe
De même que pour l’ajout d’une méthode, on peut ajouter manuellement une variable dans une classe ou l’ajouter de façon automatique. Notons que si on ajoute manuellement une variable, la mise à jour de la hiérarchie des classes (ClassView) s’effectue automatiquement.
Pour l’ajout automatique (Cf. figures 17 et 18) :
Sélectionner la classe ;
Cliquer sur le bouton droit de la souris pour obtenir le menu contextuel ; Cliquer sur « Add Member Variable ».
figure 17 – Ajout d’une variable dans une classe (génération automatique)
Entrer le type et le nom de la variable ;
Définir le type d’accès (public, protected ou private).
figure 18 – Nom et type de la variable ajoutée
La définition de la variable privée (int *tab) est ajoutée dans le fichier « nom-classe.h » et la hiérarchie des classes (ClassView) est mise à jour. Notons que l’icône est différente suivant le type d’accès de la variable (Cf. figure 19).
Pour ajouter ou supprimer un fichier, cliquer sur l’onglet FileView. Pour ajouter, cliquer sur le bouton droit de la souris et activer le menu « Add Files to Folder ». Pour supprimer, sélectionner le fichier et appuyer sur la touche « Suppr » de votre clavier. Notez que le fichier est uniquement supprimer de l’arborescence (il ne sera plus compilé). Pour le détruire physiquement il faut le supprimer du disque de manière classique (avec l’explorateur par exemple).
L’opération de fermeture d’un projet est très simple : aller dans le menu Fichier et cliquer sur « Close Workspace » (Cf. figure 20). Si tous les fichiers du projet ne sont pas sauvegardés, Visual propose de les enregistrer.
figure 20 – Fermer un projet
figure 22 – Choix du projet à ouvrir (extension .dsw)
L’éditeur offre des fonctionnalités intéressantes :
Placer le curseur de la souris sur le nom d’un type ou d’une variable fait apparaître la définition de ce type ou de cette variable dans un petit encadré (Cf. figure 23) ;
Taper le nom d’une variable de type structure ou le nom d’un objet d’une classe suivi du « . » (ou de « -> ») fait apparaître l’ensemble des membres de la structure ou de la classe (Cf. figures 24 et 25). De plus, cliquer sur l’un des membres permet d’obtenir le commentaire qui figure dans la définition initiale de la structure ou de la classe (ceci devrait encourager l’ajout de commentaires courts et pertinents ! – Cf. figure 25) ;
Taper le nom d’une méthode suivi de « ( » fait apparaître l’ensemble des prototypes de la méthode (nombre de paramètres et type de ces paramètres – Cf. figures 26 et 27).
figure 23 – Fonctionnalité intéressante de l’éditeur Visual
figure 27 – Fonctionnalité intéressante de l’éditeur Visual
Le débogueur de Visual est très complet et propose de nombreuses fonctionnalités. Les plus importantes sont présentées dans ce document.
Pour faire apparaître le menu « Debug », cliquer sur le bandeau supérieur de la fenêtre principale avec le bouton droit de la souris et sélectionner Debug (Cf. figure 28).
figure 28 – Le menu “Debug”
Le menu suivant apparaît :
L’autre menu indispensable pour le déboguage d’applications est le menu suivant (déjà présent dans le bandeau supérieur de la fenêtre principale) :
Pour ajouter un point d’arrêt, il suffit de placer le curseur dans l’instruction où l’exécution doit s’interrompre et de cliquer sur l’icône Insert/Remove Breakpoint (Cf. figure 29).
Pour exécuter le programme jusqu’au premier point d’arrêt cliquer sur l’icône Go (Cf. figure 30)
figure 30– Exécution d’un programme jusqu’à un point d’arrêt
Après avoir examiné les variables, cliquer de nouveau sur l’icône Go pour exécuter le programme jusqu’au point d’arrêt suivant.
Pour exécuter le programme instruction par instruction, utiliser l’icône Step Into du menu “Debug” (Cf. figure 31) :
Cette méthode de débogage s’avère très rapidement fastidieuse car en utilisant ce procédé on exécute le code de toutes les fonctions (y compris le code des fonctions Windows). Pour éviter le déroulement de l’intégralité du code, on peut utiliser l’icône Step Over qui permet d’exécuter pas à pas uniquement le code que nous avons écrit (Cf. figure 31) :
Pour exécuter le programme jusqu’à l’endroit où se trouve le curseur (très rapide et très pratique), il faut utiliser l’icône Run to Cursor :
Il est possible de surveiller l’état des variables grâce à la fenêtre située à gauche sous la fenêtre de l’éditeur (Cf. figure 33). Cette fenêtre comprend trois onglets :
“Auto” : affiche les variables automatiques utilisées dans l’instruction en cours (désignée par la flèche jaune) et dans la précédente ;
“Locals” : affiche la valeur des variables locales à la fonction en cours ;
“this” : affiche les membre de l’objet courant lorsque le point d’arrêt se trouve au sein d’une fonction membre d’une classe non statique.