Форум программистов, компьютерный форум CyberForum.ru

Привязать cout к созданной консоли - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
29.03.2012, 22:55     Привязать cout к созданной консоли #1
Проблема вот в чём - создаю Win32 Project в VS, вместо main() используется WinMain().
Создаю консоль через AllocConsole(), но при этом cout остаётся связан не пойми с чем, те в консоль вывод не идёт...
Вопрос:
Как перевести вывод в созданную консоль?
Очень нужно, буду благодарен всем сочувствующим!)
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
29.03.2012, 23:28     Привязать cout к созданной консоли #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
*stdout = *stderr = *_fdopen(_open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE),2),"w");
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
29.03.2012, 23:36  [ТС]     Привязать cout к созданной консоли #3
Спасибо за наводку, только у меня почему то пишет что _open_osfhandle не определён. Подключать ничего не нужно?
UPD: Подключил io.h, всё компилится, но вывод не идёт, буду продолжать методом научного тыка...
UPD2: Всё заработало, спасибо добрый человек ещё раз=)
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
29.03.2012, 23:37     Привязать cout к созданной консоли #4
Цитата Сообщение от Whiteha Посмотреть сообщение
Спасибо за наводку, только у меня почему то пишет что _open_osfhandle не определён. Подключать ничего не нужно?
C++
1
#include <io.h>
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
29.03.2012, 23:45  [ТС]     Привязать cout к созданной консоли #5
Merovingian, если не секрет, как вы узнали об этих функциях? В институте рассказали, сами в книге вычитали, или в интернете отыскали?
Я догадывался о существовании подобного, но сам найти не смог...
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
29.03.2012, 23:55     Привязать cout к созданной консоли #6
Пробывал сделать тоже в RadStudio 2009 ругается на _fdopen что она делает?
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
30.03.2012, 00:00     Привязать cout к созданной консоли #7
Цитата Сообщение от Whiteha Посмотреть сообщение
Я догадывался о существовании подобного, но сам найти не смог...

Не по теме:

Вы наверное в гугле искали, а я в яндексе

Яндекс - найдётся всё



Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
Пробывал сделать тоже в RadStudio 2009 ругается на _fdopen что она делает?
http://netcode.ru/cpp/?artID=4130

Добавлено через 1 минуту
C++
1
_getchar();
или

C++
1
_getch();
Вроде тоже с подчеркиванием приходится писать..
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
30.03.2012, 00:10     Привязать cout к созданной консоли #8
Пишу так
C++
1
2
3
4
5
6
#include<stdio.h>
#include<iostream.h>
#include<io.h>
AllocConsole();
*stdout = *stderr = *fdopen(_open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE),2),"w");
std::cout<<"Привет!"<<std::endl;
Компилится, но не выводит в консоль.
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
30.03.2012, 01:07  [ТС]     Привязать cout к созданной консоли #9
Avazart, если это копия кода который вы компилируете, то у меня вопрос - как это вообще глотает компилятор, если вы код
C++
1
2
3
4
5
AllocConsole();
 
*stdout = *stderr = *fdopen(_open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE),2),"w");
 
std::cout<<"Привет!"<<std::endl;
не в main()'e (или его разновидностях) прописываете?=0
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
30.03.2012, 01:11     Привязать cout к созданной консоли #10
Whiteha, так связать count с консольным буфером пробовали?
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
30.03.2012, 01:21  [ТС]     Привязать cout к созданной консоли #11
go, пробовал, ведь во втором посте темы дали ответ:
C++
1
*stdout = *stderr = *_fdopen(_open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE),2),"w");
Насколько я понимаю, cout изначально привязан к stdout, значит stdout нужно привязать к консоли, что код описанный выше и делает.
Те фактически cout можно назвать привязанным к консоли, или я не прав?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
30.03.2012, 01:24     Привязать cout к созданной консоли #12
Цитата Сообщение от Whiteha Посмотреть сообщение
go, дак ведь во втором посте темы дали ответ:
Не заметил. Правильно, с помощью _fdopen.

Добавлено через 44 секунды
Цитата Сообщение от Whiteha Посмотреть сообщение
Насколько я понимаю,
Почитай здесь http://www.halcyon.com/~ast/dload/guicon.htm
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
30.03.2012, 02:06     Привязать cout к созданной консоли #13
не в main()'e (или его разновидностях) прописываете?=0
Писал код в обработчике кнопки.
Консоль пустая появляется.
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
30.03.2012, 02:18     Привязать cout к созданной консоли #14
Попробуйте

C
1
FreeConsole();
перед всем этим делом

правда это наверное не из той оперы
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
30.03.2012, 03:12     Привязать cout к созданной консоли #15
C++
1
FreeConsole();
Не дает результата
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
30.03.2012, 03:25     Привязать cout к созданной консоли #16
Цитата Сообщение от go Посмотреть сообщение
Ничего полезного. Единственное что там делают это

C
1
setvbuf( stdout, NULL, _IONBF, 0 );
А так всё аналогично.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
30.03.2012, 10:24     Привязать cout к созданной консоли #17
а с если использовать только win api , как это будет выгледить?
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
30.03.2012, 14:30  [ТС]     Привязать cout к созданной консоли #18
Использовать только WinAPI для чего? Для вывода?
Тут есть разные варианты:
WriteConsole(), TextOut(), WriteConsoleOutputCharacter(), ...
Можете глянуть здесь: http://vsokovikov.narod.ru/New_MSDN_...le/cons_io.htm
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2012, 05:33     Привязать cout к созданной консоли
Еще ссылки по теме:

C++ считывание с консоли ( не с клавы, а именно с консоли)
В чем разница std::cout и просто cout? C++
Смысл знания c++ если н-р в WinAPI нет такого кода как для консоли (cout,.)? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
05.05.2012, 05:33     Привязать cout к созданной консоли #19
Пробывал следующее тоже не работает,создает консоль но не выводит
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
 
#include <windows.h> 
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
 
BOOL CreateConsole(void)
{
  FreeConsole();        //на всякий случай
  if ( AllocConsole() )
   {
     int hCrt = _open_osfhandle((long)
     GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
     *stdout = *(::_fdopen(hCrt, "w"));
     ::setvbuf(stdout, NULL, _IONBF, 0);
     *stderr = *(::_fdopen(hCrt, "w"));
     ::setvbuf(stderr, NULL, _IONBF, 0);
     return TRUE;
    }return FALSE;
}
Взято с http://inprise.narod.ru/cbuilder/htm...napifaq53.html

В тоже время как просто WriteConsole() работает http://cppbuilder.ru/articles/0110.php
Yandex
Объявления
05.05.2012, 05:33     Привязать cout к созданной консоли
Ответ Создать тему
Опции темы

Текущее время: 07:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru