J'ai un projet win32 que j'ai chargé dans Visual Studio 2005. J'aimerais pouvoir imprimer des éléments dans la fenêtre de sortie de Visual Studio, mais je ne peux pas pour la vie de moi savoir comment. J'ai essayé 'printf' et 'cout <<' mais mes messages restent obstinément non imprimés.
Existe-t-il une manière spéciale d'imprimer dans la fenêtre de sortie de Visual Studio?
Réponses:
Vous pouvez utiliser
OutputDebugString
.OutputDebugString
est une macro qui, en fonction de vos options de construction, correspond àOutputDebugStringA(char const*)
ouOutputDebugStringW(wchar_t const*)
. Dans ce dernier cas, vous devrez fournir une large chaîne de caractères à la fonction. Pour créer un littéral de caractère large, vous pouvez utiliser leL
préfixe:Normalement, vous utiliserez la version macro avec la
_T
macro comme ceci:Si votre projet est configuré pour construire pour UNICODE, il se développera en:
Si vous ne construisez pas pour UNICODE, il se développera en:
la source
myStr
. Vraimentchar*
,wchar_t*
ouLPTSTR
? En supposant que ce soitchar*
vous appelez simplementOutputDebugStringA(myStr)
ou utilisezOutputDebugStringW
avecwchar_t*
etOutputDebugString
avecLPTSTR
comme expliqué dans ma réponse.OutputDebugString
et de définir les symboles de préprocesseur appropriés pour correspondre à la largeur des caractères que vous utilisez ou d'utiliser les types flexibles "T" qui vous permettent de compiler à la fois des caractères 8 et 16 bits.Si le projet est un projet GUI, aucune console n'apparaîtra. Pour changer le projet en une console, vous devez aller dans le panneau des propriétés du projet et définir:
Cette solution ne fonctionne que si vous aviez le point d'entrée classique " int main () ".
Mais si vous êtes comme dans mon cas (un projet openGL), vous n'avez pas besoin de modifier les propriétés, car cela fonctionne mieux:
printf et cout fonctionneront comme d'habitude.
Si vous appelez AllocConsole avant la création d'une fenêtre, la console apparaîtra derrière la fenêtre, si vous l'appelez après, elle apparaîtra en avant.
Mettre à jour
freopen
est obsolète et peut être dangereux. Utilisez à lafreopen_s
place:la source
EDITBIN
peut définir le sous-système surCONSOLE
même si vous utilisezWinMain
plutôt queint main()
.Pour imprimer sur la
real
console, vous devez le rendre visible à l'aide de l'indicateur de l'éditeur de liens/SUBSYSTEM:CONSOLE
. La fenêtre de console supplémentaire est ennuyeuse, mais à des fins de débogage, elle est très précieuse.OutputDebugString
imprime sur la sortie du débogueur lors de l'exécution à l'intérieur du débogueur.la source
Envisagez d'utiliser les macros d'exécution VC ++ pour Reporting _RPT N () et _RPTF N ()
Exemple...
Ou vous pouvez utiliser les fonctions d'exécution VC ++ _CrtDbgReport, _CrtDbgReportW directement.
la source
_RPTF0
peut être utilisé là où aucune variable ne devrait être transmise après la chaîne de format. La_RPTFN
macro, en revanche, nécessite au moins un argument après la chaîne de format.Si vous souhaitez imprimer des variables décimales:
la source
Si vous avez besoin de voir la sortie d'un programme existant qui a largement utilisé printf sans changer le code (ou avec des changements minimes), vous pouvez redéfinir printf comme suit et l'ajouter à l'en-tête commun (stdafx.h).
la source
Votre projet Win32 est probablement un projet GUI, pas un projet de console. Cela provoque une différence dans l'en-tête de l'exécutable. En conséquence, votre projet GUI sera responsable de l'ouverture de sa propre fenêtre. Cela peut être une fenêtre de console, cependant. Appelez
AllocConsole()
pour le créer et utilisez les fonctions de la console Win32 pour y écrire.la source
Je cherchais un moyen de le faire moi-même et j'ai trouvé une solution simple.
Je suppose que vous avez démarré un projet Win32 par défaut (application Windows) dans Visual Studio, qui fournit une fonction "WinMain". Par défaut, Visual Studio définit le point d'entrée sur «SUBSYSTEM: WINDOWS». Vous devez d'abord changer cela en accédant à:
Projet -> Propriétés -> Linker -> Système -> Sous-système
Et sélectionnez "Console (/ SUBSYSTEM: CONSOLE)" dans la liste déroulante.
Désormais, le programme ne fonctionnera pas, car une fonction "main" est nécessaire à la place de la fonction "WinMain".
Vous pouvez maintenant ajouter une fonction "main" comme vous le feriez normalement en C ++. Ensuite, pour démarrer le programme GUI, vous pouvez appeler la fonction "WinMain" depuis la fonction "main".
La partie de départ de votre programme devrait maintenant ressembler à ceci:
Résultat de ma mise en œuvre
Vous pouvez maintenant utiliser des fonctions pour générer une sortie vers la console dans n'importe quelle partie de votre programme GUI à des fins de débogage ou à d'autres fins.
la source
Vous pouvez également utiliser la méthode WriteConsole pour imprimer sur la console.
la source