Ich habe ein Win32-Projekt, das ich in Visual Studio 2005 geladen habe. Ich möchte in der Lage sein, Dinge im Visual Studio-Ausgabefenster zu drucken, kann aber für mein ganzes Leben nicht herausfinden, wie. Ich habe 'printf' und 'cout <<' ausprobiert, aber meine Nachrichten bleiben hartnäckig unbedruckt.
Gibt es eine spezielle Möglichkeit, im Visual Studio-Ausgabefenster zu drucken?
Antworten:
Sie können verwenden
OutputDebugString
.OutputDebugString
ist ein Makro, das abhängig von Ihren Build-Optionen entwederOutputDebugStringA(char const*)
oder zugeordnet istOutputDebugStringW(wchar_t const*)
. Im späteren Fall müssen Sie der Funktion eine breite Zeichenfolge eingeben. Um ein breites Zeichenliteral zu erstellen, können Sie dasL
Präfix verwenden:Normalerweise verwenden Sie die Makroversion zusammen mit dem
_T
Makro wie folgt :Wenn Ihr Projekt für die Erstellung für UNICODE konfiguriert ist, wird es erweitert in:
Wenn Sie nicht für UNICODE bauen, wird es erweitert in:
quelle
myStr
. Ist eschar*
,wchar_t*
oderLPTSTR
? Angenommen,char*
Sie rufen einfach anOutputDebugStringA(myStr)
oder verwendenOutputDebugStringW
mitwchar_t*
undOutputDebugString
mit,LPTSTR
wie in meiner Antwort erläutert.OutputDebugString
die entsprechenden Präprozessorsymbole und definieren Sie sie entweder so, dass sie der Breite der von Ihnen verwendeten Zeichen entsprechen, oder wählen Sie die flexiblen "T" -Typen, mit denen Sie sowohl 8- als auch 16-Bit-Zeichen kompilieren können.Wenn es sich bei dem Projekt um ein GUI-Projekt handelt, wird keine Konsole angezeigt. Um das Projekt in eine Konsole umzuwandeln, müssen Sie im Projekteigenschaftenfenster Folgendes festlegen:
Diese Lösung funktioniert nur, wenn Sie den klassischen Einstiegspunkt " int main () " hatten.
Aber wenn Sie wie in meinem Fall (ein openGL-Projekt) sind, müssen Sie die Eigenschaften nicht bearbeiten, da dies besser funktioniert:
printf und cout funktionieren wie gewohnt.
Wenn Sie AllocConsole vor dem Erstellen eines Fensters aufrufen, wird die Konsole hinter dem Fenster angezeigt. Wenn Sie sie danach aufrufen, wird sie vor dem Fenster angezeigt.
Aktualisieren
freopen
ist veraltet und kann unsicher sein. Verwenden Siefreopen_s
stattdessen:quelle
EDITBIN
kann das Subsystem auf einstellen,CONSOLE
auch wenn SieWinMain
anstatt verwendenint main()
.Um auf der
real
Konsole zu drucken , müssen Sie sie mithilfe des Linker-Flags sichtbar machen/SUBSYSTEM:CONSOLE
. Das zusätzliche Konsolenfenster ist ärgerlich, aber für Debugging-Zwecke sehr wertvoll.OutputDebugString
Druckt auf die Debugger-Ausgabe, wenn sie im Debugger ausgeführt wird.quelle
Erwägen Sie die Verwendung der VC ++ - Laufzeitmakros für die Berichterstellung _RPT N () und _RPTF N ()
Beispiel...
Oder Sie können die VC ++ - Laufzeitfunktionen _CrtDbgReport, _CrtDbgReportW direkt verwenden.
quelle
_RPTF0
sie verwendet werden kann, wenn nach der Formatzeichenfolge keine Variablen übergeben werden sollen. Das_RPTFN
Makro benötigt dagegen mindestens ein Argument nach der Formatzeichenfolge.Wenn Sie Dezimalvariablen drucken möchten:
quelle
Wenn Sie die Ausgabe eines vorhandenen Programms sehen möchten, das printf ausgiebig verwendet hat, ohne den Code zu ändern (oder mit minimalen Änderungen), können Sie printf wie folgt neu definieren und zum allgemeinen Header (stdafx.h) hinzufügen.
quelle
Ihr Win32-Projekt ist wahrscheinlich ein GUI-Projekt, kein Konsolenprojekt. Dies führt zu einem Unterschied im ausführbaren Header. Infolgedessen ist Ihr GUI-Projekt dafür verantwortlich, ein eigenes Fenster zu öffnen. Das kann jedoch ein Konsolenfenster sein. Rufen Sie
AllocConsole()
auf, um es zu erstellen, und verwenden Sie die Win32-Konsolenfunktionen, um darauf zu schreiben.quelle
Ich suchte nach einer Möglichkeit, dies selbst zu tun, und fand eine einfache Lösung.
Ich gehe davon aus, dass Sie in Visual Studio ein Standard-Win32-Projekt (Windows-Anwendung) gestartet haben, das eine "WinMain" -Funktion bietet. Standardmäßig setzt Visual Studio den Einstiegspunkt auf "SUBSYSTEM: WINDOWS". Sie müssen dies zuerst ändern, indem Sie zu:
Projekt -> Eigenschaften -> Linker -> System -> Subsystem
Und wählen Sie "Konsole (/ SUBSYSTEM: CONSOLE)" aus der Dropdown-Liste.
Das Programm wird jetzt nicht ausgeführt, da anstelle der Funktion "WinMain" eine "Haupt" -Funktion benötigt wird.
Jetzt können Sie eine "Haupt" -Funktion hinzufügen, wie Sie es normalerweise in C ++ tun würden. Um das GUI-Programm zu starten, können Sie anschließend die Funktion "WinMain" innerhalb der Funktion "main" aufrufen.
Der Startteil Ihres Programms sollte nun ungefähr so aussehen:
Ergebnis meiner Implementierung
Jetzt können Sie Funktionen verwenden, um sie in einem beliebigen Teil Ihres GUI-Programms zum Debuggen oder für andere Zwecke an die Konsole auszugeben.
quelle
Sie können auch die WriteConsole- Methode verwenden, um auf der Konsole zu drucken.
quelle