Неконсольноя приложение - вывод в консоль Win C++

Devid

Как можно вывести что-нибудь в консоль, из которой было запущенно неконсольное приложение?
Например, как сделать чтобы на команду "app.exe -h" выводился help?
cout <<, printf не выводят.

klyv

никак.

spitfire

Собранные при помощи mingw приложения норовят создавать stdout.txt и stderr.txt.

Marusetta

создать новую консоль не подходит?

klyv

создать новую консоль не подходит?
будет вывод в новую консоль, а хотят в старую.

klyv

Пардон, наметился вариант.
 AttachConsole(ATTACH_PARENT_PROCESS); 
должен прицепить тебя к консоли папы, после чего заработают cout, printf, итп.

Devid

Спасибо, работает. Единственное, что printf и cout << не работают, приходится _cprintf использовать.

bleyman

printf и cout << не работают
А ты им сообщаешь, что у тебя новая консоль? Ну, там, cout было бы неплохо на неё перенацелить, и у сишной среды тоже какие-то методы были.

Devid

Вот, нашел такую функцию http://bytes.com/forum/thread665637.html
  
#include <Tlhelp32.h>
#include <cstdio>
#include <io.h>
#include <fcntl.h>
#include <iostream>
#include <ios>

BOOL RedirectIOToConsole(DWORD dwParent)
{
int hConHandle;
long lStdHandle;
FILE *fp;

// allocate a console for this app
BOOL bRet = AttachConsole(dwParent);
if (!bRet)
return bRet;

// 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);

// 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;
return bRet;
}

Делает то, что обещает. Правда пользы от этого особой нет, результат такой-же, как если использовать _cprintf;
Оставить комментарий
Имя или ник:
Комментарий: