Russian Qt Forum
Ноябрь 24, 2024, 11:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как собрать GUI и Console app?  (Прочитано 4783 раз)
Tereks
Гость
« : Декабрь 17, 2009, 12:11 »

Вопрос такой. Написал я приложение, затем понадобилось сделать его в 2 интерфейсах - графическом и консольном. Добавил в ПРО параметр console, ну и инклюд. Однако теперь собранный релиз при запуске выводит оба окна: саму форму и консоль, а надо только форму. Подскажите как сделать
Записан
Dendy
Гость
« Ответ #1 : Декабрь 17, 2009, 12:41 »

http://msdn.microsoft.com/en-us/library/ms682073%28VS.85%29.aspx

Покопайте в сторону: FreeConsole()
Записан
Tereks
Гость
« Ответ #2 : Декабрь 17, 2009, 13:19 »

WINAPI хотелось бы трогать в последнюю очередь, так как кроссплатформенность с этим исчезает.
Записан
SABROG
Гость
« Ответ #3 : Декабрь 17, 2009, 15:24 »

Тебя никто не заставляет выводить интерфейс. Сделай консольную, а интерфейс выводи по ключу к программе или по по команде с консоли.
Записан
Dendy
Гость
« Ответ #4 : Декабрь 17, 2009, 16:01 »

WINAPI хотелось бы трогать в последнюю очередь, так как кроссплатформенность с этим исчезает.

Это и так платформозависимая задача, кроссплатформенность в этой задаче не может исчезнуть, потому что её нет вообще.
Записан
Tereks
Гость
« Ответ #5 : Декабрь 18, 2009, 10:08 »

Тебя никто не заставляет выводить интерфейс. Сделай консольную, а интерфейс выводи по ключу к программе или по по команде с консоли.

Мне консоль нужна как полноценная сторона приложения. Как пример - запускаем app.exe /? и получаем справку. Для вывода на консоль приходится в проект добавлять параметр "console", однако опять же при простом запуске приложения консоль выскакивает как из бочки. И FreeConsole не помогает.
Записан
Dendy
Гость
« Ответ #6 : Декабрь 18, 2009, 11:55 »

У нас в программе есть консольное приложение, которое эту консоль прячет при старте, правда как оно это делает - нужно посмотреть.
Записан
crackedmind
Гость
« Ответ #7 : Декабрь 18, 2009, 13:08 »

Во-первых, FreeConsole уберет только консоль созданную по AllocConsole.
Код:
    if ( argc > 1 )
    {
        if ( strstr(argv[1], "/h") )
        {
            AllocConsole();
            AttachConsole(ATTACH_PARENT_PROCESS);
            SetConsoleTitle(L"Boom!");
            DWORD out = 0;
            HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
            WriteConsole(hStdOut, L"eee", 3, &out, 0);
            Sleep(5000);
            FreeConsole();
            //
        }
    }

Ну вот как то  так Улыбающийся

А вот кусок кода с редиректом в stdout чтоб работали printf и прочее...
Найдено в инете. Думаю сами адаптируете как надо

Код:
void CreateConsoleLog(const char *winTitle)
{
AllocConsole();
SetConsoleTitle(winTitle);

int hConHandle;
long lStdHandle;
FILE *fp;

// 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 );
}
« Последнее редактирование: Декабрь 18, 2009, 13:10 от crackedmind » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 21.