Pas de sortie de console lors de l'utilisation d'AllocConsole et de l'architecture cible x86
J'ai un projet WinForms, et si l'utilisateur veut une console de débogage, j'alloue une console avec AllocConsole()
.
Toutes les sorties de la console fonctionne normalement avec l'architecture cible définie sur "any CPU", mais quand je l'ai changer pour "x86" il n'a pas de sortie du tout (Console.Read()
fonctionne toujours comme prévu). Si j'ouvre le fichier EXE directement les, la sortie fonctionne. Il ressemble à Visual Studio de la réutiliser dans une "Sortie" de la fenêtre.
J'ai aussi essayé cette réponse, mais il ne fonctionne pas, j'ai aussi essayé Console.SetOut(GetStdHandle(-11))
qui ne fonctionne pas non plus.
Réglage de l'architecture cible de "any CPU" est pas une option pour moi.
Voici donc mes deux questions:
- Pourquoi est-ce seulement le cas lorsque l'architecture cible est définie sur x86?
- Comment puis-je sortie de ma console lors de l'exécution à l'intérieur de Visual Studio?
source d'informationauteur teamalpha5441
Vous devez vous connecter pour publier un commentaire.
Activer le débogage de code natif" est activée, les sorties de consoles emballé avec AllocConsole est redirigé vers la fenêtre de sortie de débogage à la place.
La raison pour laquelle cela se produit seulement dans les architectures x86 et pas AnyCPU est parce que vous ne pouvez déboguer du code natif dans un x86 application.
Notez que ce problème se produit uniquement avec les consoles créé avec AllocConsole. Une application de console de sortie n'est pas redirigé.
EDIT: L'autre raison pour que la console ne sorte pas de texte, c'est quand vous avez écrit dans la console avant d'appeler AllocConsole.
Quelle que soit la raison, ce code permettra de restaurer sortie si il a été redirigé, et rouvrez la console dans le cas où il est invalide. Il utilise le nombre magique 7, qui est ce que la poignée de stdout est généralement.
Voir Comment détecter si la Console.(Stdin) a été redirigée?
pour une autre façon de détecter si la console gère avez été redirigé.
La suite travaillé pour moi de vs 2015, aucun n'a fonctionné à partir d'autres réponses:
Source: https://social.msdn.microsoft.com/profile/dmitri567/?ws=usercard-mini
J'ai aussi eu ce problème. Chaque fois que j'ai essayé de déboguer mon application, la console était vide. Étrangement, le lancement de l'exe sans le débogueur a bien fonctionné.
J'ai trouvé que j'avais à
Enable the Visual Studio hosting process
du projetDebug
menu.Stephen est exact que
Enable native code debugging
ne redirection de la console de la fenêtre de Sortie. Cependant, quel que soit le natif de débogage de code paramètre, j'ai vu absolument aucune sortie dans un lieu jusqu'à ce que j'ai activé le processus d'hébergement Visual Studio.Ce qui pourrait avoir été la raison que le simple fait de désactiver le débogage de code natif ne parvenez pas à résoudre votre problème.
Aucune des précédentes réponses a bien fonctionné pour moi avec VS2017 et Windows 10 (par exemple ils n'ont pas si lancer l'application en mode debug).
Ci-dessous vous pouvez trouver un peu améliorée code. L'idée est la même, mais les nombres magiques sont supprimés (Ceztko déjà mentionné) et tout le nécessaire\des cours d'eau sont initialisés.
Ce code fonctionne pour moi si créer une nouvelle console (alwaysCreateNewConsole = true).
Fixation à la console de processus parent (alwaysCreateNewConsole = false) comporte plusieurs inconvénients. Pour exemple, j'ai été incapable de complètement imiter le comportement de l'application console lancé à partir de cmd. Et je ne suis pas sûr qu'il est possible à tous.
Et le plus important: après la révision de Console de classe j'ai reconsidéré idée générale de l'utilisation de la Console de classe avec créé manuellement la console. Il fonctionne bien (je l'espère) pour la plupart des cas, mais peut apporter beaucoup de douleur dans l'avenir.