Я изменил пример MFC для OpenCascade, добавив некоторые функциональные возможности (это был пример HLR). Приложение использует архитектуру документа / представления, причем большую часть работы выполняет класс документа.
Некоторые из новых функций не требуют графического интерфейса, поэтому программа закрывается до открытия графического интерфейса, который я выполняю, вызывая exit(0)
от специализации CDocument.
Моя проблема заключается в том, что для нашего рабочего процесса приложение MFC будет вызываться из командной строки Windows. Как только он вызывается, он возвращает управление обратно в оболочку и продолжает весело в фоновом режиме, независимо от того, открывает он графический интерфейс или нет. Мне нужно, чтобы приложение блокировало командную строку независимо от того, открыт графический интерфейс или нет.
Я читал о CWinApp и CMDIFrameWnd, но если вы можете сделать блок приложения из командной строки, я не могу понять, как это сделать.
Ты не можешь EXE-файлы помечаются как консольные или windows-программы, и, если это программный элемент управления Windows, передаются диспетчеру Windows, и консоль продолжает работать.
Лучше всего создать небольшое консольное приложение, которое вызывает CreateProcess
запустить приложение Windows, а затем просто WaitForSingleObject
на ручке hProcess для его завершения.
Более подробную информацию о том, почему это невозможно, можно найти в блоге The Old New Thing здесь:
http://blogs.msdn.com/b/oldnewthing/archive/2009/01/01/9259142.aspx
Если вы установили свой исполняемый файл как консольное приложение с параметром компоновщика / SUBSYSTEM: CONSOLE, командная строка будет блокироваться до выхода из приложения. Помните, что консольное приложение может иметь графический интерфейс Windows.
Настройка параметра компоновщика / SUBSYSTEM: CONSOLE имеет одну проблему, если вы сделаете это в качестве параметра компоновщика, вам нужно будет настроить точку входа как main () вместо winmain. В следующем потоке есть несколько обходных путей для этого (спасибо Ульриху Экхардту за упоминание точки входа):
Visual Studio 2012 C ++ Стандартный вывод
Есть также второй минус этого подхода. Если программа не запускается из окна консоли, приложение создаст для вас окно консоли. Это может запутать пользователей.