Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создать консоль и использовать его поток вывода. 
:(
    Опции темы
Neitron
Дата 13.10.2005, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 580
Регистрация: 3.10.2005
Где: Москва

Репутация: 3
Всего: 5



Давно пора в качестве отладочного потока использовать консоль.
Подскажите пожалуйста, как направить поток вывод именно в мной созданую консоль через CreateProcess


--------------------
Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей.
Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ
PM MAIL   Вверх
srd
Дата 13.10.2005, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: 4
Всего: 49



Замем CreateProcess? Вот, наваял примерчик - GUI приложение создает консоль и выводит в неё текст.
Код

#define WIN32_LEAN_AND_MEAN
#include <tchar.h>
#include <windows.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam )
{
    switch( msg )
    {
    case WM_CREATE:
        {
            // Создаём консольное окно
            AllocConsole();

            // Прикручиваем созданную консоль к стандартному потоку вывода
            int handle = _open_osfhandle( reinterpret_cast<long>( GetStdHandle( STD_OUTPUT_HANDLE ) ), _O_TEXT );
            *stdout = *_fdopen( handle, "w" );
            setvbuf( stdout, NULL, _IONBF, 0 );            
        }
        break;

    case WM_LBUTTONDOWN:
        {
            // Выводим текст в консоль при нажатии левой кнопки мыши
            printf(" WM_LBUTTONDOWN (x=%d, y=%d)\n", (int)(LOWORD(lparam)), (int)(HIWORD(lparam)) );
        }
        break;

    case WM_DESTROY:
        {
            FreeConsole();
            PostQuitMessage(0);
        }
        break;

    default:
        return DefWindowProc( hwnd, msg, wparam, lparam );
    }

    return 0L;
}

int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE, LPTSTR, int nCmdShow )
{
    WNDCLASSEX wc    = {0};

    wc.cbSize        = sizeof( wc );
    wc.hbrBackground = GetSysColorBrush( COLOR_WINDOW );
    wc.hCursor       = LoadCursor( NULL, IDC_ARROW );
    wc.hInstance     = hInstance;
    wc.lpfnWndProc   = WndProc;
    wc.lpszClassName = _T("DummyClass");
    wc.style         = CS_HREDRAW | CS_VREDRAW;

    RegisterClassEx( &wc );

    HWND hwnd = CreateWindowEx( WS_EX_OVERLAPPEDWINDOW, wc.lpszClassName, _T("Example"), WS_OVERLAPPEDWINDOW,
                                CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL );
    ShowWindow( hwnd, nCmdShow );
    UpdateWindow( hwnd );

    MSG msg = {0};

    while( GetMessage( &msg, NULL, 0U, 0U ) )
    {
        TranslateMessage( &msg );
        DispatchMessage( &msg );
    }

    return static_cast<int>( msg.wParam );
}




--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
Neitron
Дата 13.10.2005, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 580
Регистрация: 3.10.2005
Где: Москва

Репутация: 3
Всего: 5



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

        AllocConsole();
        WriteConsole(GetStdHandle( STD_OUTPUT_HANDLE ),"sssssssssss",10,0,NULL);



--------------------
Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей.
Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ
PM MAIL   Вверх
srd
Дата 13.10.2005, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: 4
Всего: 49



Цитата(Neitron @ 13.10.2005, 18:11)
Что-то у меня твой пример не особо работать стал, не отправлял он у меня ничего,

Ну хз, у меня всё работало smile

Цитата(Neitron @ 13.10.2005, 18:11)

AllocConsole();
WriteConsole(GetStdHandle( STD_OUTPUT_HANDLE ),"sssssssssss",10,0,NULL);

Такой способ много лучше. Просто мне было интересно направить в созданную консоль стандартный поток вывода CRT.



--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
Earnest
Дата 14.10.2005, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Цитата(srd @ 13.10.2005, 10:21)
Такой способ много лучше. Просто мне было интересно направить в созданную консоль стандартный поток вывода CRT.

Посмотри еще функции _CrtDebugReport и связанные с ней. Можно поставить хук, можно указать, куда выводить стандартную отладочную информацию (в т.ч. в окно, в файл, и т.д.) ... много чего.


--------------------
...
PM   Вверх
Neitron
Дата 17.10.2005, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 580
Регистрация: 3.10.2005
Где: Москва

Репутация: 3
Всего: 5



Цитата(Earnest @ 14.10.2005, 14:13)
Цитата(srd @ 13.10.2005, 10:21)
Такой способ много лучше. Просто мне было интересно направить в созданную консоль стандартный поток вывода CRT.

Посмотри еще функции _CrtDebugReport и связанные с ней. Можно поставить хук, можно указать, куда выводить стандартную отладочную информацию (в т.ч. в окно, в файл, и т.д.) ... много чего.

Ох, извращаться из-за отладочной информации?? Не моё)))


--------------------
Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей.
Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0657 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.