Как получить приложение MFC для блокировки из командной строки?

Я изменил пример MFC для OpenCascade, добавив некоторые функциональные возможности (это был пример HLR). Приложение использует архитектуру документа / представления, причем большую часть работы выполняет класс документа.

Некоторые из новых функций не требуют графического интерфейса, поэтому программа закрывается до открытия графического интерфейса, который я выполняю, вызывая exit(0) от специализации CDocument.

Моя проблема заключается в том, что для нашего рабочего процесса приложение MFC будет вызываться из командной строки Windows. Как только он вызывается, он возвращает управление обратно в оболочку и продолжает весело в фоновом режиме, независимо от того, открывает он графический интерфейс или нет. Мне нужно, чтобы приложение блокировало командную строку независимо от того, открыт графический интерфейс или нет.

Я читал о CWinApp и CMDIFrameWnd, но если вы можете сделать блок приложения из командной строки, я не могу понять, как это сделать.

1

Решение

Ты не можешь EXE-файлы помечаются как консольные или windows-программы, и, если это программный элемент управления Windows, передаются диспетчеру Windows, и консоль продолжает работать.

Лучше всего создать небольшое консольное приложение, которое вызывает CreateProcess запустить приложение Windows, а затем просто WaitForSingleObject на ручке hProcess для его завершения.

Более подробную информацию о том, почему это невозможно, можно найти в блоге The Old New Thing здесь:

http://blogs.msdn.com/b/oldnewthing/archive/2009/01/01/9259142.aspx

0

Другие решения

Если вы установили свой исполняемый файл как консольное приложение с параметром компоновщика / SUBSYSTEM: CONSOLE, командная строка будет блокироваться до выхода из приложения. Помните, что консольное приложение может иметь графический интерфейс Windows.

Настройка параметра компоновщика / SUBSYSTEM: CONSOLE имеет одну проблему, если вы сделаете это в качестве параметра компоновщика, вам нужно будет настроить точку входа как main () вместо winmain. В следующем потоке есть несколько обходных путей для этого (спасибо Ульриху Экхардту за упоминание точки входа):
Visual Studio 2012 C ++ Стандартный вывод

Есть также второй минус этого подхода. Если программа не запускается из окна консоли, приложение создаст для вас окно консоли. Это может запутать пользователей.

0

По вопросам рекламы [email protected]