2010-04-07 1 views
4

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

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

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

ответ

2

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

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

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

  • включают «stdio.h»
  • ссылку ЭЛТ (C Run Time) библиотека
  • что-то еще.

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

+0

Спасибо, но меня больше интересовало, как на самом деле связывается с консолью. Какая часть кода, а не источника, но компиляция кода, говорит Windows, что я хочу выделить консоль? Благодарю. –

0

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