Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > printf в неконсольном приложении |
Автор: Dem_max 14.5.2013, 15:57 |
Как в не консольном (в своем же процессе) приложении перехватить то что выводит printf. И если существует StdIn и StdOut для не консольного приложения как его перехватить и вывести в тот же Edit |
Автор: GremlinProg 15.5.2013, 07:04 |
думаю, в таком случае надежнее будет использовать пайпы Добавлено через 28 секунд а не StdIn и StdOut |
Автор: Dem_max 15.5.2013, 07:33 | ||
Пробовал так
но возвращается ReadConsole FAIL = 8 Собственно к чему замут то, имею python.dll из которой вызываю функции и передаю им имя скрипта на выполнение, но результата не вижу. Нужно как то получать выполнения скрипта питона. |
Автор: DarthTon 15.5.2013, 11:31 | ||||
У меня работает как-то так:
Тут возникают проблемы с буферизацией stdout, если её не отключить (setvbuf(stdout, NULL, _IONBF, 0)) то пайп ждёт либо полного заполнения буфера, либо надо флашить stdout вручную. В документации к setvbuf, однако, есть флаг _IOLBF, описание которого гласит
Но у меня он всё равно не заработал, как бы я не пытался отправить в поток newline character. |
Автор: DarthTon 15.5.2013, 14:59 |
При помощи WriteConsole можно писать только в консольные хендлы (GetStdHandle(STD_OUTPUT_HANDLE) и т.п.), для хендла пайпа оно возвращает Invalid Handle; подмена дефолтного STD_OUTPUT_HANDLE на хендл пайпа тоже не помогает . Я не тестировал WriteFile в пайп на больших сообщениях, но на маленьких всё работает как и должно . Проблемы только при использовании CRT с буферизацией. |
Автор: Dem_max 15.5.2013, 19:11 |
_open_osfhandl это CRT от мелкомягких, оно никак не подходит для других компиляторов. |