Comment afficher la sortie printf dans une application Win32 (saisie avec un WinMain) dans Visual Studio 2010?Comment afficher la sortie printf dans une application Win32 sur Visual Studio 2010?
Répondre
vous peut strictement répondre à votre question, utilisez les fonctions printf comme dans une application Win32 dans Visual Studio 2010 en utilisant la fonction winbase.hOutputDebugString
.
J'ai écrit un programme simple qui montre comment le faire.
#include <windows.h>
#include <stdio.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdShow, int nCmdShow)
{
int number = 10;
char str[256];
sprintf_s(str, "It works! - number: %d \n", number);
OutputDebugString(str);
return 0;
}
La fonction OutputDebugString
prend un LPCSTR
en tant que paramètre. J'ai utilisé le sprintf_s
pour formater la chaîne avant l'impression.
Cela afficherait le résultat dans la fenêtre de sortie de Visual Studio 2010.
J'espère que ça aide!
Évidemment le 256 n'est là que par exemple mais j'aime bien cette approche. Certainement ce que j'avais en tête. –
Bien sûr, juste un exemple. Vous pouvez l'envelopper dans une classe/fonction pour plus de commodité. Heureux que ça a aidé! À votre santé! – rbento
'wchar_t str [256]; wsprintf (str, L "Cela fonctionne! - nombre:% d \ n", nombre); OutputDebugString (str); ' –
Je sais que je l'ai fait dans le passé en utilisant la fonction AllocConsole, mais je me souviens aussi que c'était juste un peu plus compliqué que prévu.
Une recherche rapide de Google sur AllocConsole donne ce qui semble être un Windows Developer Journal article qui semble pertinent. De là, ce qui suit ressemble à ce dont je me souviens, aussi vague soit-il.
void SetStdOutToNewConsole()
{
int hConHandle;
long lStdHandle;
FILE *fp;
// Allocate a console for this app
AllocConsole();
// Redirect unbuffered STDOUT to the console
lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
fp = _fdopen(hConHandle, "w");
*stdout = *fp;
setvbuf(stdout, NULL, _IONBF, 0);
}
Pour une raison quelconque cela ne fonctionne pas avec la sortie colorée – paulm
Here is a page that will tell you how to do this, including sample code.
Vous devez créer une fenêtre de console à l'aide AllocConsole(), puis associer les poignées fichier standard C aux guidons de la nouvelle fenêtre de la console.
Vous aurez besoin d'une fenêtre de console. De loin le moyen le plus simple d'en obtenir un est de modifier une option de l'éditeur de liens: Projet + Propriétés, Lieur, Système, Sous-Système = Console. Ajouter une méthode principale():
int main() {
return _tWinMain(GetModuleHandle(NULL), NULL, GetCommandLine(), SW_SHOW);
}
'_tWinMain' est la fonction principale à la place appelée' WinMain' pour une application Win32 –
Merci torak pour votre réponse. Cela m'a beaucoup aidé.
je besoin d'un plus grand rouleau arrière tampon ainsi fait quelques ajouts après avoir pris un coup d'œil à la API functions. Partagée ici dans le cas où il aide quelqu'un d'autre:
void SetStdOutToNewConsole()
{
// allocate a console for this app
AllocConsole();
// redirect unbuffered STDOUT to the console
HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
int fileDescriptor = _open_osfhandle((intptr_t)consoleHandle, _O_TEXT);
FILE *fp = _fdopen(fileDescriptor, "w");
*stdout = *fp;
setvbuf(stdout, NULL, _IONBF, 0);
// give the console window a nicer title
SetConsoleTitle(L"Debug Output");
// give the console window a bigger buffer size
CONSOLE_SCREEN_BUFFER_INFO csbi;
if (GetConsoleScreenBufferInfo(consoleHandle, &csbi))
{
COORD bufferSize;
bufferSize.X = csbi.dwSize.X;
bufferSize.Y = 9999;
SetConsoleScreenBufferSize(consoleHandle, bufferSize);
}
}
Cela augmente le défilement arrière hauteur (mémoire tampon d'écran) 9999 lignes.
Testé sous Windows XP et Windows 7.
Pour enregistrer les recherches de coupe-et-pasters comme moi, il faut également inclure
Une autre façon qui ne serait pas nécessaire de changer de existant printf et imprimer aussi à la fenêtre de sortie VS irait quelque chose comme ceci:
#define printf printf2
int __cdecl printf2(const char *format, ...)
{
char str[1024];
va_list argptr;
va_start(argptr, format);
int ret = vsnprintf(str, sizeof(str), format, argptr);
va_end(argptr);
OutputDebugStringA(str);
return ret;
}
...
printf("remains %s", "the same");
vous êtes un génie! – Skynight
- 1. Visual Studio 2010 - Seulement Afficher la sortie d'une catégorie spécifique
- 2. Comment écrire dans la fenêtre de sortie dans Visual Studio?
- 3. Visual Studio 2010 Express. Ecrire dans la fenêtre de sortie
- 4. Debugger.Break sur Visual Studio 2010
- 5. Application Windows Form C Visual Studio 2010
- 6. Asp.net MVC 2 sur Visual Studio 2010?
- 7. Visual Studio 2010 WPF
- 8. Comment publier une application dans Visual Studio?
- 9. Que contient une application MVC? (Visual Studio 2008/2010)
- 10. Comment installer la documentation Visual Studio 2010
- 11. Visual Studio 2010 - RemovePreviousVersions
- 12. Visual Studio 2010 (bêta 2) solution dans Visual Studio 2008
- 13. Débogueur Visual Studio 2010
- 14. Visual Studio 2010 - Datagridview
- 15. Comment configurer TFS 2010 dans Visual Studio 2010 Premium/Ultimate?
- 16. Asp.Net application de service Web manquant dans Visual Studio 2010
- 17. comment compiler glblendequation dans Visual Studio 2010?
- 18. Comment obtenir des avertissements printf dans Visual Studio 2005?
- 19. visual studio 2010 architecte
- 20. Comment créer Visual Basic.NET 64 bits dans Visual Studio 2010?
- 21. Dans Visual Studio 2010, comment pouvez-vous déboguer une classe?
- 22. Comment faire pour exécuter une application sur Windows démarrer dans l'API Win32 en utilisant Visual C++
- 23. Paramètres dans Visual Studio C++ 2010
- 24. Sortie xUnit.net localisée dans la fenêtre de sortie Visual Studio
- 25. Comment ajouter une référence DirectX dans Visual Studio 2010
- 26. Visual Studio 2010 debug minidump
- 27. Comment tracer la sortie d'une application de console C++ Win32?
- 28. Visual Studio 2010 (Argument Exception)
- 29. Configurer 'Enregistrer sur perdre le focus' dans Visual Studio 2010
- 30. BDD avec Machine.Specifications dans Visual Studio 2010
Voulez-vous ouvrir une fenêtre de console séparée de l'application, ou voulez-vous pour l'afficher dans un contrôle sur la fenêtre principale de l'application? Ou connectez-vous à un fichier? –
En fait j'espérais quelque chose comme la fenêtre de la console dans xcode où vous pouvez voir la sortie de la console sans avoir à changer de code. Un journal montrant stdout ferait aussi bien. –