I am coding a win32 project, so the .exe have a win32 window
but i found it difficult to debug when I want to watch each step of the
program, most of then are print to "Command Window" by 'printf'
Can I have both win32 and command window, Mingw could do it but it can
not compile some vc8 project, Any one knows how to make it in M$ vc, It
will be very helpful

Re: Can I get both 'Command Window" and "Win32 Window" by Igor

Igor
Sat Feb 04 21:21:26 CST 2006

"GongDongliang" <GongDongLiang@gmail.com> wrote in message
news:1139108617.884219.273230@g44g2000cwa.googlegroups.com
> I am coding a win32 project, so the .exe have a win32 window
> but i found it difficult to debug when I want to watch each step of
> the program, most of then are print to "Command Window" by 'printf'

If you can change your printf statements to use OutputDebugString
instead, it dumps into Output window in the debugger.

Otherwise, see KB Article KB133302 "FIX: Application Fails But Gives No
Error Message". The article itself is irrelevant, but it contains a
sample of using AllocConsole to create a console window and redirect
stdout to it.
--
With best wishes,
Igor Tandetnik

With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead. -- RFC 1925



Re: Can I get both 'Command Window" and "Win32 Window" by Tim

Tim
Tue Feb 07 01:12:18 CST 2006

"GongDongliang" <GongDongLiang@gmail.com> wrote:
>
>I am coding a win32 project, so the .exe have a win32 window
>but i found it difficult to debug when I want to watch each step of the
>program, most of then are print to "Command Window" by 'printf'
>Can I have both win32 and command window, Mingw could do it but it can
>not compile some vc8 project, Any one knows how to make it in M$ vc, It
>will be very helpful

A console application can open windows. You could just have one half of an
#ifdef that includes a WinMain, and one half that does "int main()".
--
- Tim Roberts, timr@probo.com
Providenza & Boekelheide, Inc.

Re: Can I get both 'Command Window" and "Win32 Window" by jsanga

jsanga
Tue Feb 07 12:03:03 CST 2006


GongDongliang wrote:
> I am coding a win32 project, so the .exe have a win32 window
> but i found it difficult to debug when I want to watch each step of the
> program, most of then are print to "Command Window" by 'printf'
> Can I have both win32 and command window, Mingw could do it but it can
> not compile some vc8 project, Any one knows how to make it in M$ vc, It
> will be very helpful

Do a google search for RedirectIOToConsole. Many good articles. Here is
a sample of what I use.

console.cpp

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <iostream>
#include <fstream>

using namespace std;


// maximum number of lines the output console should have

static const WORD MAX_CONSOLE_LINES = 500;

void RedirectIOToConsole()
{

CONSOLE_SCREEN_BUFFER_INFO coninfo;


// allocate a console for this app
AllocConsole();

// set the screen buffer to be big enough to let us scroll text
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);
coninfo.dwSize.Y = MAX_CONSOLE_LINES;
SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);

// redirect unbuffered STDOUT to the console
long lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
int hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
FILE *fp = _fdopen( hConHandle, "w" );
*stdout = *fp;
setvbuf( stdout, NULL, _IONBF, 0 );

// redirect unbuffered STDIN to the console
lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
fp = _fdopen( hConHandle, "r" );
*stdin = *fp;
setvbuf( stdin, NULL, _IONBF, 0 );

// redirect unbuffered STDERR to the console
lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
fp = _fdopen( hConHandle, "w" );
*stderr = *fp;
setvbuf( stderr, NULL, _IONBF, 0 );


// make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog
// point to console as well
ios::sync_with_stdio();

}

Then in InitApplication, call to redirect.

BOOL CMyApp::InitApplication()
{
RedirectIOToConsole();
return CWinApp::InitApplication();
}