Консоль Windows - PullRequest
       18

Консоль Windows

4 голосов
/ 07 апреля 2010

Ну, у меня простой вопрос, по крайней мере, я надеюсь, что он простой. Некоторое время я интересовался консолью win32. Наш учитель сказал нам, что консоль Windows предназначена только для DOS и эмуляции реального режима. Ну, я знаю, что это неправда, потому что DOS-приложения запускаются эмулятором, который использует только консоль для отображения вывода. Еще одна вещь, которую я узнал, это то, что консоль встроена в Windows начиная с NT. Что ж. Но что я не смог найти, так это то, как на самом деле консольные программы написаны для использования консоли. Я использую Visual C ++ для программирования (ну, для обучения). Итак, единственное, что мне нужно сделать для использования консоли, это выбрать консольный проект. Сначала я подумал, что Windows решает, запускать ли приложение в консоли или пытается запустить приложение в оконном режиме. Поэтому я создал программу win32 и попробовал printf (). Ну, я не мог скомпилировать это. Я знаю, что по определению printf () печатает текст или переменные в стандартный вывод. Я также обнаружил, что stdout является консольным интерфейсом для вывода. Но я не мог найти то, что на самом деле является stdout.

Итак, в основном я хочу спросить, в чем разница между консольным приложением и приложением win32. Я думал, что Windows запускает консоль, когда она получает команду из функций "console-family". Но, очевидно, это не так, поэтому должен быть какой-то код, который на самом деле командует окнами для создания интерфейса консоли.

И второй вопрос: когда консоль создается, как Windows распознает, какой консольный терминал используется для какого приложения? Я имею в виду, что на самом деле это стандартный вывод? Это область памяти или какая-то подпрограмма Windows? Благодарю.

Ответы [ 2 ]

2 голосов
/ 07 апреля 2010

Когда вы связываете приложение Win32, вы выбираете, будет ли это Windows или Console. В случае консоли окно консоли будет выделено автоматически (или, если оно есть у родительского процесса, повторно).

Однако приложение Windows (т.е. GUI) также может отображать консольное окно, просто вызовите AllocConsole API.

Тестируемое приложение может не скомпилироваться по ряду причин, в сообщении об ошибке должно быть указано, нужно ли вам:

  • включает "stdio.h"
  • ссылка на библиотеку CRT (C Run Time)
  • что-то еще.

Обычно, если вы выбираете консольное приложение в мастере нового проекта для проекта Win32, эти вещи должны просто работать, в противном случае вам нужно выбрать правильные параметры компиляции и ссылки.

0 голосов
/ 07 апреля 2010

Чтобы ответить на ваш второй вопрос, stdout в Windows сопоставлен с HANDLE, возвращаемым GetStdHandle(STD_OUTPUT_HANDLE), который по умолчанию сопоставлен с CONOUT$. Вы можете получить доступ к этому, позвонив CreateFile("CONOUT$", ...), если вы так склонны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...