OberonCore https://forum.oberoncore.ru/ |
|
Console - Реализация модулей In и Out для виндовой консоли https://forum.oberoncore.ru/viewtopic.php?f=90&t=2626 |
Страница 1 из 1 |
Автор: | Евгений Темиргалеев [ Четверг, 06 Май, 2010 23:22 ] |
Заголовок сообщения: | Console - Реализация модулей In и Out для виндовой консоли |
Енту подсистему в оформленном виде обещал тов. Роману. Три года ещё не прошло ![]() Как база использовалась реализация Log для консоли Ивана Горячева (viewtopic.php?p=5979#p5979) Вложение: (из переписки Евгений Темиргалеев<->AVC) Евгений Темиргалеев писал(а): Вот подсистема Console, которая реализует In и Out для консоли. Она у меня не доделана для работы с unicode, и вообще не доведена до ума - вроде alpha-версия. Но для отладочных целей хватает (особенно в DLL), а больше пока не надо. AVC писал(а): Работает, но есть (пока) недостаток - не могу переназначить вывод в файл (program.exe > output) Евгений Темиргалеев писал(а): С этим тоже возился. Вот что могу вспомнить: - ощущение, что в винде с этим бардак полный. Для ГУЁвых приложений и консольных механизмы отличаются. (Например, если стартовать гуёвое с консоли, эта консоль для него не будет вводом/выводом по умолчанию, а для консольного будет). - AllocConsole also sets up standard input, standard output, and standard error handles for the new console. Если Вы создали консоль для гуёвого приложения, то перенаправление в файл пропало. Вот как сделано в Console (надеюсь, что вспомнил правильно... надо было сразу про эти грабли записать ![]() 1) Модуль StdStreams читает хендлы для стандартных потоков. В т. ч. и при загрузке. Для консольных приложений хендлы есть всегда. Для гуевого если вывод не назначен в файл и не открыта консоль, они будут "никакие". Это отражают флаги nulRead/nulWrite. 2) Модуль Open используется в In/Out для создания консоли. Либо открывается всегда новая консоль (new) либо, только если консоли нету (exists). 3) Процедуры Open в модулях In/Out: Консоль создаётся только если хендлы ввода/вывода "никакие". Это позволяет для гуёвого приложения направить вывод в файл. Код: IF Std.nulRead THEN O.Open(O.exists); Std.Get END (ред-р колл-ции) карточка: http://oberoncore.ru/bbcc/subs/console/ |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |