Particularité d'un code en C sous Windows !

 

 

WinMain

Habituellement, la première fonction déclenchée dans un programme en C est la fonction main().

Ce n'est pas tout à fait le cas pour un programme Windows. Il faut en effet partir sur le principe que main() est déjà réservée pour faire des initialisations. La fonction principale pour les développeurs ne sera donc plus main(), mais WinMain().

Il faut taper ceci:

int APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{

// Le code principal...

 

return code_de_sortie;

}

 

Avec code_de_sortie à 0, tout est ok, sinon, code erreur. Normalement, ce code provient du message WM_QUIT.

 

A la place de "int APIENTRY WinMain" on peut encore trouver "int PASCAL WinMain" ou "int WINAPI WinMain".

 

Les paramètres sont alors:

hInstance qui est l'instance de notre programme en cours

hPrevInstance qui est l'instance du programme précédent (Ne plus utiliser, voir remarque ci-dessous !!!)

lpCmdLine qui est le pointeur sur les paramètres passés à l'application lors de son lancement. Là aussi cela change, il n'y a plus de passage du nombre d'arguments et d'un tableau de pointeurs sur les arguments, Windows enverra les arguments directement dans une chaîne de caractères (Voir l'exemple à la fin). A vous donc de découper éventuellement cette chaîne de caractères pour récupérer les différents arguments !

nCmdShow qui est le mode d'affichage initial de la fenêtre (icône, normal, plein écran...)

 

Remarque IMPORTANTE concernant hPrevInstance

Certaines applications doivent impérativement savoir si d'autres instances sont en cours d'exécution. Pour y parvenir, il suffisait dans les versions 16 bits de Windows de comparer hPrevInstance avec la valeur NULL. Si c'était la première instance de l'application, vous récupériez bien NULL, sinon c'était l'instance du programme précédent.

Depuis les versions 32 bits, le paramètre hPrevInstance n'est plus renseigné et est toujours à NULL. Evidemment, il n'est maintenant plus possible d'utiliser hPrevInstance pour rechercher les instances antérieures. Il faudra donc utiliser d'autres méthodes comme les sémaphores, ...

 

Exemple

Voici un exemple d'utilisation de WinMain.

Ce programme affiche simplement un message dans lequel on retrouvera éventuellement les paramètres passés au lancement.

Image non trouvée !

Pour passer des paramètres, vous pouvez utiliser le menu "Démarrer/exécuter" puis tapez le chemin et le nom du programme, espace et les paramètres. Ou encore faire de même dans une session DOS.

Ex.:

Mon programme se trouve dans le répertoire C:\temp

Tapez C:\temp\Winmain.exe Mes paramètres