Quelles sont les différences entre les applications Windows et console?
Lors de la création d'un nouveau projet dans Visual C ++, il demande de choisir l'une des options ci-dessus.
Quelles sont les différences entre les applications Windows et console?
Lors de la création d'un nouveau projet dans Visual C ++, il demande de choisir l'une des options ci-dessus.
La seule différence est qu'une application de console toujours engendre une console si elle n'est pas lancée à partir d'un (ou de la console est activement supprimés au démarrage). Une application windows, d'autre part, ne pas pondre une console. Il peut encore joindre à un existant de la console ou en créer un nouveau à l'aide de AllocConsole
.
Cela rend les applications Windows mieux adapté pour l'interface graphique des applications ou des applications en arrière-plan, car vous ne voulez pas avoir une fenêtre de terminal créé pour ceux-ci.
Sur une note plus technique, la seule différence entre une Console et un exécutable Windows est un octet de l'en-tête PE de l' exe
le fichier. Le basculement de cet octet manuellement (par exemple à l'aide d'un éditeur hexadécimal) convertit le type d'application. C'est un bien-publié hack qui est utilisé pour créer des applications de console en VB6 (où ce type de demande n'a pas été explicitement pris en charge).
Afin de déterminer et de modifier le sous-système, type de demande, vous avez besoin de lire des parties de l'en-tête PE. L'adresse de la sous-système de données n'est pas résolu si, parce que ça fait partie de l'option en-tête de fichier, dont la position est déterminée par une adresse stockée dans le DOS en-tête de fichier (dans le membre e_lfanew
). Cette adresse en réalité à l' _IMAGE_NT_HEADERS
record qui, à son tour, comprend l' IMAGE_OPTIONAL_HEADER32
de la structure. Cela a un int16
1) membre appelés Subsystem
. La valeur est de 2 pour une application Windows et de 3 pour l'application console. D'autres systèmes existent (en particulier, la norme POSIX et noyau).
J'ai écrit une petite application VB6 pour modifier le sous-système d'une application, qui peut être téléchargé à partir de ActiveVB sous forme de code source.
Le format PE n'est pas très bien documenté, mais ce document peut servir comme une introduction: le Peering à l'Intérieur de la PE: Visite de la Win32 Portable Executable Format de Fichier.
1) Ce n'est pas vraiment en contradiction avec mon affirmation qu'un seul octet est différent: l'octet le plus significatif de ce membre est toujours 0. Seul l'octet le moins significatif des changements.
En plus de la différence mentionnée par Konrad, console de Windows et des applications se comportent différemment lorsqu'il est appelé de manière interactive à partir de l'invite de commande:
Lorsque vous démarrez une application console, l'invite de commande ne retourne pas jusqu'à ce que l'application de la console de sortie. Lorsque vous démarrez une application windows, la commande retourne immédiatement.
Ce n'est pas vrai pour les fichiers de commandes; ils seront toujours attendre jusqu'à ce que l'application se ferme. (Vous pouvez toujours utiliser l' start
de commande pour démarrer une application sans attendre.)
Vous pouvez modifier le sous-système avec EDITBIN.exe ( entrée MSDN sur EDITBIN.exe )
La différence est dans la façon dont les applications sont écrasé. Lorsque vous utilisez la console de modèle, vous disposez d'un stub qui va ouvrir dans une console. Si vous êtes déjà en cours d'exécution dans une console, il ignore l'appel de tourner un.
Par la même occasion, une application windows est conçu avec un formulaire par défaut. Si vous souhaitez la désactiver, vous pouvez créer une ébauche de Windows Forms application qui est essentiellement une application de console sans une fenêtre de console.
Aussi loin que les entrailles de l'app va, ils sont essentiellement les mêmes. La différence majeure est ajouté à la compilation de la scène.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.