Console Windows

Eh bien, j’ai une question simple, du moins j’espère que c’est simple. J’ai été intéressé par la console win32 pendant un moment. Notre professeur nous a dit que la console Windows était uniquement destinée à l’émulation DOS et en mode réel. Eh bien, je sais que ce n’est pas vrai, car les applications DOS sont exécutées par un émulateur qui n’utilise que la console pour afficher la sortie. Une autre chose que j’ai apprise est que la console est intégrée à Windows depuis NT. Bien. Mais ce que je n’ai pas pu trouver, c’est comment sont en réalité les programmes de la console écrits pour utiliser la console. J’utilise Visual C ++ pour la programmation (enfin, pour l’apprentissage). Donc, la seule chose à faire pour utiliser la console est de sélectionner un projet de console. J’ai d’abord pensé que Windows décide du moment où elle lance l’application en console ou tente d’exécuter l’application en mode fenêtre. J’ai donc créé le programme win32 et essayé printf (). Eh bien, je n’ai pas pu le comstackr. Je sais que, par définition, printf () imprime du texte ou des variables à stdout. J’ai également constaté que stdout est l’interface de la console pour la sortie. Mais, je n’ai pas trouvé ce qu’est réellement la stdout.

Donc, fondamentalement, ce que je veux demander, c’est où est la différence entre l’application console et l’application Win32. Je pensais que Windows lance la console quand il reçoit la commande des fonctions “console-family”. Mais de toute évidence, ce n’est pas le cas, il doit donc y avoir du code qui commande réellement Windows pour créer l’interface de la console.

Et la deuxième question est, quand la console est créée, comment Windows reconnaît-il quel terminal de console est utilisé pour quelle application? Je veux dire, qu’est-ce que stdout en réalité? Est-ce une zone en mémoire ou une routine Windows appelée? Merci.

Lorsque vous liez une application Win32, vous indiquez s’il s’agit de Windows ou de la console. Dans le cas de la console, une fenêtre de console sera allouée automatiquement (ou, si le processus parent en a un, réutilisée).

Cependant, une application Windows (c’est-à-dire une interface graphique) peut également afficher une fenêtre de console, il suffit d’appeler l’API AllocConsole .

Vous testez l’application peut ne pas comstackr pour un certain nombre de raisons, le message d’erreur devrait vous dire si vous devez:

  • inclure “stdio.h”
  • référencer la bibliothèque CRT (C Run Time)
  • autre chose.

Normalement, si vous sélectionnez l’application de console dans le nouvel assistant de projet pour un projet Win32, ces choses devraient simplement fonctionner, sinon vous devrez sélectionner les bonnes options de compilation et de lien.

Pour répondre à votre deuxième question, stdout dans Windows est mappé sur le HANDLE renvoyé par GetStdHandle(STD_OUTPUT_HANDLE) qui est mappé par défaut sur CONOUT$ . Vous pouvez y accéder en appelant CreateFile("CONOUT$", ...) si vous le souhaitez.