Win GUI App запущено из консоли => печать на консоль невозможна? - PullRequest
1 голос
/ 21 июня 2011

это не очередное «мне нужна консоль в моем приложении с графическим интерфейсом», которое обсуждалось довольно часто.Моя ситуация отличается от этого.

У меня есть приложение с графическим интерфейсом Windows, которое запускается из командной строки.Теперь, если вы передадите неправильные параметры этому приложению, я не хочу, чтобы появилось всплывающее окно с указанием возможных переключателей, но я хочу, чтобы это было напечатано в консоли, которая породила мой процесс.

Я получилнастолько далеко, что я могу печатать в консоль (вызов AttachConsole (...) для родительского процесса), но проблема в том, что мое приложение не «блокирует».Как только я запускаю ее, командная строка возвращается, и все выходные данные записываются в это окно (см. Прилагаемое изображение для иллюстрации).

_

Я немного поиграл, создалконсольное приложение, запустило его и увидело, что оно «блокирует», приглашение появляется только после завершения работы приложения.Переключение моего приложения с графическим интерфейсом на / SUBSYSTEM: консоль вызывает странные ошибки (MSVCRTD.lib (crtexe.obj): ошибка LNK2019: неразрешенный внешний символ "_main" в функции "___ tmainCRTStartup".)

Я видел подход с использованием каналас подходом ".exe" и ".com" от MSDEV, но я нахожу это ужасным.Есть ли способ решить эту красивее?

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

Это не то поведение, которое вы можете изменить, изменив свое приложение (кроме того, чтобы пометить его как уже обсуждалось).Интерпретатор команд просматривает подсистему, которой помечен исполняемый файл, и решает, ждать ли завершения приложения соответствующим образом. Если исполняемый файл помечен как имеющий GUI, то интерпретатор команд не ожидает его завершения.

В некоторых интерпретаторах команд это настраивается.Например, в JP Software TCC / LE можно настроить интерпретатор команд так, чтобы они всегда ожидали завершения приложений , даже с графическим интерфейсом.Однако в CMD от Microsoft это не настраиваемое поведение.Ответ Microsoft заключается в использовании команды START с параметром /WAIT.

Еще раз: это не поведение вашего приложения.Помимо перемаркировки как программы TUI, нет никакого программного способа, который бы задействовал ваш код для его изменения.

1 голос
/ 21 июня 2011

Может быть, написать консольное приложение-оболочку, которое проверяет параметры, печатает сообщение об ошибке при неверных параметрах и вызывает / запускает реальную программу, когда параметры верны?

...