You are on page 1of 4

Par Frédéric Mazué

Débuter la programmation
Windows avec C#
C#, langage solide et
relativement facile à
A border la programmation Windows n'est pas une mince
affaire. Windows est un système d'exploitation multi
tâches complexe, qui ne se laisse pas aisément dompter. Ensuite
se pose le problème des outils. Windows est écrit en C. Alors dé-
buter avec ce langage est un choix qui se tient. Il existe un com-
PRATIQUE
apprendre, est un pilateur libre, lcc-win32, doté d'une documentation suffisante,
même pour entreprendre l'écriture de gros programmes. Nous
bon choix pour se avons d'ailleurs consacré une série d'articles à ce thème il y a
quelques temps dans Programmez! Toutefois, cette approche com-
porte des difficultés. Il est nécessaire de bien maîtriser C pour
lancer dans la avoir une chance de s'en sortir. Ensuite, il faut comprendre la
structure complexe d'une application C asynchrone, c'est à dire
programmation pilotée par les événements. Enfin, le comportement des appels
système n'est pas toujours simple à appréhender. Loin de là
Windows. même !
Apprendre la programmation Windows à travers le langage C# est
une autre possibilité, très intéressante. C# est le dernier langage
sorti des têtes pensantes de Microsoft. Certes, concevoir C#
comme un outil d'apprentissage ou pédagogique, n'a pas été la
motivation première de Microsoft ;-) Mais le fait est, que C# est un
langage robuste, sûr à l'exécution et facile à apprendre. Orienté
objet, sa bibliothèque d'exécution est un ensemble de classes ,qui
constituent une sur-couche aux APIs en C du système, ce qui en
simplifie considérablement la programmation, tout en apportant
une meilleure concision du code. Enfin, considération non négli-
geable, il est possible de programmer en C# uniquement avec des
outils gratuits. C'est d'ailleurs cet aspect de la question qui nous
intéresse aujourd'hui. Nous ne nous adressons pas aux profes-
sionnels, qui ont les moyens de s'offrir l'environnement Visual
Studio .NET et qui n'ont que faire de nos conseils. Nous nous
adressons aux débutants fauchés, mais pleins de bonne volonté :)
Nous considérons toutefois que le lecteur à quelques notions de
programmation objet.

Le matériel et les outils
Microsoft permet de télécharger l'environnement appelé "Micro-
soft .NET Framework Software Development Kit," qui contient
absolument tout ce qu'il faut pour écrire des programmes Win-
dows en C#, y compris une documentation exhaustive. Seulement
il y a une ombre au tableau : il vous faut un système d'exploita-
tion costaud. Autrement dit, vous devez programmer sur :
• Microsoft Windows NT 4.0
• Microsoft Windows 2000

C#
NIVEAU : DÉBUTANT
• Microsoft Windows XP
Notons que Windows XP Pro est requis pour une utilisation com-
plète du SDK. Cependant, avec un 'petit' XP, seules les classes
asp.net sont inopérantes, ce qui ne fera pas défaut au débutant.
68 La bonne nouvelle est, qu'une application C# peut être déployée

Programmez N°49 • JANVIER 2003
et tourner sur un Windows 98 ou Millénium, pourvu que les librai- répertoire xemacs-packages\lisp\prod-modes de votre installation
ries d'exécution .NET soient installées sur ces systèmes. Etant de XEmacs. Ensuite, ajoutez ces lignes à la fin du fichier de confi-
averti de tout cela, vous pouvez vous rendre à : http://msdn.micro- guration .emacs.el ou init.el :
soft.com/downloads/ pour tenter l'aventure et télécharger ce pan-
(autoload 'csharp-mode "csharp-mode"
tagruélique bébé de 137 Mo. Si vous avez une connexion
"Major mode for editing C# code." t)
poussive, l'achat du Cd-Rom pour moins de 10 dollars est une (setq auto-mode-alist (cons '( "\\.cs\\'" . csharp-mode ) auto-mode-alist ))
option à considérer sérieusement. Enfin, puisqu'on en est aux
dépenses, l'achat d'un petit livre de poche sur C# peut être une
bonne idée. Il en existe d'excellents pour des prix ridicules. Par Si vous ne savez pas où localiser ce fichier, accédez y directement
exemple 'Formation à C# -- Microsoft Press', vous apprendra tout depuis le menu 'Options|Edit Init File' d'Emacs. Tout est ensuite
ce dont vous avez besoin pour 10 Euros. automatique.
Une fois en possession de la SDK, vous devez bien sûr l'installer, Si au lieu d'Emacs, vous utilisez XEmacs, et selon la version de
ce qui ne pose pas de problème. L'opération terminée, ouvrez une celui-ci, il se peut que vous vous heurtiez à un message d'erreur
fenêtre console et lancez le compilateur C# comme ceci : pour les fichiers C#:
csc

Si vous voyez un message du genre :

Microsoft (R) Visual C# .NET Compiler version 7.00.9466
for Microsoft (R) .NET Framework version 1.0.3705
Copyright (C) Microsoft Corporation 2001. All rights reserved.
Tout est en ordre.

Les éditeurs
Un programme en C# doit être écrit dans un ou plusieurs fichiers,
contenant uniquement du texte, pour pouvoir être traités par le
compilateur. Pour cette raison, l'emploi d'un programme de traite- > Figure 1: Ecriture de code C# avec Eclipse.
ment de texte, qui insère des caractères spéciaux dans le docu-
ment est à proscrire. Vous pouvez employer le rudimentaire file mode spécification error: (void-variable font-lock-constant-face)
bloc-note (Notepad) ou le un peu moins fruste Wordpad, pourvu
que vous sauvegardiez vos documents au format texte. Cela dit, il La raison en est que la variable font-lock-constant-face, qui doit
est pertinent de vous équiper d'un éditeur dédié à la programma- détenir une fonte, n'existe pas par défaut dans votre XEmacs. Pour
tion. Il en existe de nombreux, disponibles sur le net. Je vous sug- y remédier, ajouter ces deux lignes :
gère de considérer Eclipse (http://www.eclipse.org/). Cet éditeur
(setq font-lock-constant-face nil)
encore jeune, mais très prometteur (figure 1) dispose d'un plugin
(make-face 'font-lock-constant-face)
C# que vous pouvez téléchargez à http://www.improve.com.
Sachez toutefois que Java (Jdk >= 1.3) doit être présent sur votre JUSTE AVANT les lignes ajoutées plus haut.
machine, pour utiliser Eclipse.
Une autre possibilité, celle qu'en tant que vieux dinosaure je pré- Un coucou traditionnel
fère, est d'employer le légendaire éditeur Emacs
(http://www.gnu.org) En fait j'utilise XEmacs Il est maintenant temps de passer à la pratique en écrivant le pro-
(http://www.xemacs.org), dont l'interface est plus agréable. Emacs gramme traditionnel. On suppose que le texte de ce code se situe
dispose désormais de nombreux modes C#. Vous les trouverez dans un ficher nommé coucou.cs.
facilement sur le Web. Certains de ces modes sont très puissants,
class Coucou
mais assez lourds et intéresseront principalement les utilisateurs
{
chevronnés d'Emacs. Je vous suggère de télécharger un mode public static void Main()
Emacs C# simple, mais amplement suffisant à {
http://davh.dk/script/. L'installation de ce mode, qui vient sous la System.Console.WriteLine("Coucou !");
forme d'un seul fichier, consiste à déposer ce dernier dans le sous- } 69
}

Programmez N°49 • JANVIER 2003
Cet article n'ayant pas pour but d'expliquer C#, mais seulement Compiler du code, en se reposant sur la bonne volonté du compi-
d'apprendre à utiliser des outils, nous ne donnons maintenant lateur, va bien pour de petits exemples. Mais très vite apparaîtra le
que les explications minimum pour comprendre ce code. besoin d'être beaucoup plus directif. Ainsi, nous pouvons spécifier
• C# est un langage objet. Un programme C# est constitué d'une explicitement au compilateur que nous voulons qu'il génère un
ou plusieurs classes. Une classe dans le code source devient un exécutable de nom 'coucou' et qu'il y joigne la librairie System.dll.
objet lors de l'exécution. On procède alors en utilisant des commutateurs en ligne de com-
• Un programme C# doit avoir au moins une classe ayant une mande:
méthode Main (avec un m majuscule). Cette méthode est alors le • /target ou /t peut être suivi de exe, winexe, library ou module,
point d'entrée du programme, c'est à dire que l'exécution de tout pour générer respectivement: un exécutable console, un exécu-
programme C# commence par cette méthode Main. table Windows, un module ou une librairie.
• C# est équipé à la base d'un énorme jeu de classes, groupées • /out est suivi par le nom du fichier cible.
dans des namespace ou espaces de noms.
• Les classes ayant des propos communs sont groupés dans un
même namespace. Il est possible d'accéder à une classe avec une
notation pointée. Ainsi System.Console fait référence à la classe
Console de l'espace de nom 'System'.
• On invoque les méthodes d'une classe ou d'un objet également
avec cette notation pointée. Finalement System.Console.Writeline
invoque la méthode 'WriteLine' de la classe 'Console' de l'espace
de nom 'System'

Le Framework SDK vient avec une documentation complète. Vous
pouvez connaître tous les espaces de noms, toutes les classes et
leurs méthodes à votre disposition. Il suffit d'ouvrir la documenta-
tion, puis de choisir 'Reference' puis 'Class Libray' (figure 2). Usez
et abusez de cette documentation.
> Figure 2: La documentation du SDK décrit tous les espaces de noms et
toutes les classes de C#.
Le compilateur C#
Apprenons maintenant à utiliser le compilateur C#. Celui-ci va • /reference ou /r est suivi du nom des librairies qui seront jointes
transformer le fichier texte coucou.cs en un programme exécu- à l'exécutable.
table. Dans une console et en étant situé dans le répertoire conte-
nant le fichier coucou.cs, tapez : Ainsi nous aurions pu compiler notre programme comme ceci:
csc coucou.cs csc /t:exe /r:System.dll /out:coucou.exe coucou.cs

Dès que le compilateur rend la main, vous pouvez apprécier le (Remarque: En pratique la librairie System.dll est systématique-
résultat en tapant 'coucou' (figure 3). ment jointe par le compilateur C#. L'exemple ci-dessus a avant
Le compilateur csc est relativement intelligent et a pris beaucoup tout une vocation pédagogique.)
d'initiatives par lui-même. Il a généré un programme exécutable et S'il est nécessaire de joindre plusieurs librairies, on énumère
connecté celui-ci à une librairie d'exécution de C#. Dans ce cas, la celles-ci en les séparant par des virgules. Par exemple :
librairie est System.dll. Il est simple de connaître le nom de toutes /r:System.dll,System.Drawing.dll,System.Windows.Forms.dll
les librairies existantes: à chaque espace de noms de la documen-
tation correspond un fichier de même nom plus l'extension.dll. Attention! Il ne doit pas y avoir d'espaces dans une telle énuméra-
Exemples : tion. Ainsi :
/r:System.dll, System.Drawing.dll,System.Windows.Forms.dll
Namespace Librairie
PRATIQUE

est invalide. On verra dans un article à venir qu'il peut être pra-
System System.dll
System.Drawing System.Drawing.dll
tique de répéter un commutateur. Ainsi :
System.Windows.Forms System.Windows.Forms.dll csc /t:exe /r:System.dll /r:System.Drawing.dll /out:coucou.exe coucou.cs
etc. etc.
serait parfaitement correct.

Diviser pour régner
Avant d'aborder la programmation Windows et donc de faire des

C#
NIVEAU : DÉBUTANT
choses amusantes, nous devons acquérir encore un savoir faire.
Dès qu'un programme grossit, il devient malaisé, voire insuppor-
table de concentrer le code dans un seul fichier. Nous devons donc
apprendre à fragmenter un programme en de multiples petits
70 fichiers et à faire en sorte que le compilateur regroupe tout ça, lors

Programmez N°49 • JANVIER 2003
de la génération de l'application. La technique est simple. Il y aura
Mon make à moi
un fichier 'principal' et les autres fichiers. Ces autres fichiers Nous savons éclater un programme en plusieurs morceaux. Le
seront compilés séparément un à un, non pas en exécutable mais revers de la médaille est qu'il faut recompiler sans omission tout
en modules. Un module peut être vu comme un fichier intermé- fichier, après modification, puis recompiler le fichier principal, pour
diaire, analogue à un fichier objet du langage C. Soit le fichier prin- mettre l'application à jour. Ce qu'il nous faut, est un utilitaire pour
cipal suivant : automatiser cette tâche fastidieuse. Un tel utilitaire s'appelle un
make. Vous pouvez télécharger gratuitement le GNU make à
http://www.gnu.org. Pour installer le make, il suffit de décompres-
ser l'archive et de mettre le PATH de votre système à jour, pour
qu'il pointe sur les exécutables.

Ceci fait, pour assurer la compilation de votre projet, vous devez
écrire un fichier Makefile. Nous en apprendrons les secrets petit à
petit. Voici le makefile capable de générer notre projet:

CC=csc
REF=/r:System.dll
> Figure 3: Notre première compilation. Un début prometteur. TARGETTYPE=/t:exe
MODULES=ce.ntm
ADDMODULES=/addmodule:ce.ntm
// fichier coucou.cs TARGET=coucou.exe
class Coucou
{
public static void Main() $(TARGET): coucou.cs $(MODULES)
{ $(CC) $(ADDMODULES) $(TARGETTYPE) $(REF) /out:$(TARGET) coucou.cs
DireBonjour coucou_ext = new DireBonjour();
coucou_ext.Bonjour(); ce.ntm: CoucouExterne.cs
} $(CC) /t:module $(REF) /out:ce.ntm CoucouExterne.cs
}
clean:
del *.exe
del *.ntm

Attention !! les lignes indentées DOIVENT débuter par une tablatu-
re et ne DOIVENT contenir AUCUN caractère d'espacement. Sinon
vous vous heurteriez à des messages d'erreur à faire dresser les
cheveux sur la tête.

L'opération de génération se lance alors par la seule commande
'make' dans la console (figure 5). Notez que make peut être lancé
directement depuis XEmacs. Même chose depuis Eclipse, si vous
> Figure 4: Compilation en deux temps.
déclarez make comme un outil externe. Remarquez comment réagit
et le fichier secondaire suivant :

// fichier CoucouExterne.cs
class DireBonjour
{
public void Bonjour()
{
System.Console.WriteLine("Bonjour a tous :-)");
}
}

On compile d'abord les fichiers secondaires en modules. Nous n'en avons qu'un, donc:

csc /t:module /out:ce.ntm CoucouExterne.cs
> Figure 5: Automatisez le travail de compilation avec un utilitaire make.

Remarquez le commutateur /t qui demande la génération d'un make, si vous le lancez une seconde fois. Essayez ensuite de modi-
module. L'extension .ntm du fichier généré, est une abréviation en fier un des fichiers puis relancez make. Observez le résultat.
lieu et place de .NeTModule, utilisé par défaut par le compilateur. Nous savons désormais tout ce qu'il nous faut, pour créer de
Nous n'avons maintenant plus qu'à compiler le fichier principa,l en beaux programmes en C#. Nous mettrons cela en pratique la pro-
y intégrant notre module: chaine fois, avec des applications Windows fenêtrées. C'est légiti-
me me direz vous :-) ■
csc /t:exe /out:coucou.exe /addmodule:ce.ntm coucou.cs
par Frédéric Mazué
Et voilà! (figure 4) fmazue@programmez.com 71

Programmez N°49 • JANVIER 2003