В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

ИНФОРМАЦИЯ: Вызов подпрограммы CRT вывода из графического интерфейса пользователя приложения

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:105305
Аннотация
Чтобы использовать библиотеку времени выполнения c выхода подпрограммах printf() из графического интерфейса пользователяприложения, это необходимо для создания консоли. Приложения Win32интерфейс программирования (API) AllocConsole() создает консоли. Библиотека CRTПлановое setvbuf() удаляет буферизации таким образом, вывод отображается немедленно.

Этот метод работает, если запустить графический Интерфейс приложений из командной строки илииз диспетчера файлов. Однако этот способ не работает, если приложениезапустить диспетчер программ или с помощью команды «Пуск». Нижекод показан способ решения проблемы:
   int hCrt;   FILE *hf;   AllocConsole();   hCrt = _open_osfhandle(             (long) GetStdHandle(STD_OUTPUT_HANDLE),             _O_TEXT          );   hf = _fdopen( hCrt, "w" );   *stdout = *hf;   i = setvbuf( stdout, NULL, _IONBF, 0 );				
Этот код открывает новый дескриптор низкого уровня CRT правильный консоли выводадескриптор, связывает новый поток с низкоуровневыми дескриптора и заменяетс помощью этого нового потока STDOUT. Этот процесс берет на себя функции, использующиеstdout, такие как printf(), puts() и т. д. Используйте ту же процедуру дляSTDIN и stderr.

Обратите внимание на то, что этот код не устраняет проблему с маркерами, 0, 1 и 2. Вфакт, из-за других сложностей не удается исправить это, иПоэтому необходимо использовать вместо ввода-вывода низкого уровня потока ввода-вывода.
Дополнительная информация
При запуске графического интерфейса пользователя приложения с помощью команды «Пуск», триобрабатывает стандартной операционной системы STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, иSTD_ERROR_HANDLE все «обнуление» по инициализации консолиподпрограммы. Эти три маркеры заменяются на допустимые значения, если графический интерфейс пользователяприложение вызывает метод AllocConsole(). Таким образом после этого вызоваGetStdHandle() всегда будет возвращать значения допустимого дескриптора. Проблема в том, чтобиблиотека CRT завершения инициализации перед приложение получаетвозможность вызывать AllocConsole(); есть три низкой дескрипторы ввода-вывода 0, 1 и 2уже были настроены для использования исходного обнуление дескрипторов ОС, так что все CRTВвод-вывод отправляется на неверные дескрипторы операционной системы и вывода CRT не отображается вконсоль. Используйте метод обхода, описанные выше, для устранения этой проблемы.

В случае использования, запуск из командной строки без графического интерфейса пользователя приложенияКоманда «Пуск», стандартный, дескрипторы операционной системы не обнуление правильно,но неправильно наследуются от CMD.EXE-ФАЙЛА. Когда приложения CRTВыполняет инициализацию, три низкой дескрипторы ввода-вывода 0, 1 и 2 инициализируются с помощьюДескриптор три числа, которые приложение наследует CMD.EXE-ФАЙЛА. Когдаприложение вызывает метод AllocConsole(), консоль процедуры инициализацииПопробуйте заменить инициализацию консоли считает недопустимымСтандартная ОС обрабатывать значения со значениями допустимым дескриптором из новой консоли. Посовпадение, поскольку процедуры инициализации консоли склонны разглашатьте же три значения для стандартных дескрипторов операционной системы консолиИнициализация приведет к замене стандартных значений дескриптор операционной системы с одинаковымизначения, которые были там до--из них унаследованы от CMD.EXE-ФАЙЛА. Таким образом,В этом случае работает ввода-вывода CRT.

Важно понимать, что возможность использования процедуры CRT из графического интерфейса пользователяприложение, запустите из командной строки не было разработки так, чтобы это не возможноРабота в будущих версиях Windows NT или Windows. В будущей версии,может потребоваться временное решение не только для приложения, запущенные на командыНачато строки с «начало <application name="">», но также для приложенийКомандная строка именем «приложения».</application>
3.10 3,50 CRT перенаправления маркеров std

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 105305 — последний просмотр: 06/01/2011 08:48:00 — редакция: 4.0

Microsoft Win32 Application Programming Interface

  • kbconsole kbinfo kbkernbase kbmt KB105305 KbMtru
Отзывы и предложения