Output in Win32



  • Abend,

    ich habe in VS 2008 ein Win32 Project (GUI, keine Konsole!) und wenn ich da folgendes schreibe:

    printf("test");
    std::cout << "test2";
    OutputDebugStr("test3");
    

    wird im VS Fenster "Output" nur test3 ausgegeben. In diesem Output Fenster ist bei mir eingestellt: "Show output from: Debug"

    Meine Fragen:
    A. Was bedeutet dieses "Debug"? Ich kenne bis jetzt nur stdout und stdin, aber was ist dieses "debug"?

    B. Mit diesem OutputDebugStr() könnte ich ja jetzt wunderbar Ausgaben machen, nur leider funktioniert das dann nicht mehr im Release Mode. Wie kann ich Ausgaben in dieses VS Fenster sowohl im debug als auch release build machen? Muss ich dazu eine Konsole mit AllocConsole() öffnen? (würde ich gerne vermeiden!)



  • Das Ausgabe-Fenster im VS kannst du halt für Debug-Ausgaben nutzen. Im Release-Build macht das doch keinen Sinn. Wo bitte sollte denn dann dein Text ausgegeben werden, wenn kein VS offen ist?



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • _matze schrieb:

    Im Release-Build macht das doch keinen Sinn. Wo bitte sollte denn dann dein Text ausgegeben werden, wenn kein VS offen ist?

    Doch z.B. wenn Du mit DebugView (Sysinternals) etwas analysieren möchtest.
    Simon



  • Wie gebe ich dann am sinnvollsten Text in einer reinen Win32 GUI Anwendung aus (der Text soll sowohl im debug als auch release build ausgegeben werden)?



  • blatterS. schrieb:

    Wie gebe ich dann am sinnvollsten Text in einer reinen Win32 GUI Anwendung aus (der Text soll sowohl im debug als auch release build ausgegeben werden)?

    Wo ausgeben?



  • Auf der Konsole.



  • VOID ShowConsole( INT nShow ) {
    	static HWND (WINAPI *pfnGetConsoleWindow)( VOID );
    	static INT nInitConsole, hCrt;
    	FILE *hf;
    
    	if(!nInitConsole) {
    		/* allocate a console for the process */
    		AllocConsole();
    		hCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE),
    			0x4000);
    
    		hf = _fdopen( hCrt, "w" );
    		*stdout = *hf;
    		setvbuf( stdout, NULL, _IONBF, 0 );
    
    		/* I really should upgrade my 1998 PSDK but I just can't
    			be arsed... */
    		pfnGetConsoleWindow = (HWND(WINAPI*)(VOID))GetProcAddress(
    			LoadLibrary(_T("Kernel32")), "GetConsoleWindow");
    
    		nInitConsole = 1;
    
    		ShowWindow(pfnGetConsoleWindow(), SW_HIDE);
    		SetForegroundWindow(g_hWnd);
    	}
    
    	ShowWindow(pfnGetConsoleWindow(), nShow); 
    }
    

    ゆっくりしていってね



  • Ich benutze jetzt einfach AllocConsole() und WriteConsole()


Anmelden zum Antworten