Один исполняемый файл, который запускается как приложение с графическим интерфейсом или консольное приложение на основе командной строки в Visual Studio 2005 - PullRequest
4 голосов
/ 21 апреля 2009

У меня есть приложение Qt в Visual Studio 2005 , которое связано с использованием \subsystem:windows, так что при запуске скомпилированного исполняемого файла оно также не создает терминал командной строки .

Я хотел бы создать режим командной строки: когда я запускаю его с аргументом командной строки --nogui, графический интерфейс не отображается, а запускается простая программа командной строки. Поскольку при связывании используется /subsystem:windows, в режиме командной строки не отображается ни один из выводов std::cout, если я не связываю свой исполняемый файл с \subsystem:console.

Есть ли способ настроить компиляцию / компоновку таким образом, чтобы один и тот же исполняемый файл мог либо представлять окна графического интерфейса пользователя, либо вести себя как консольное приложение на основе параметров командной строки?

PS. Я использую Qt 4.2.0 и Visual Studio 2005, и проект находится на C ++.

Ответы [ 4 ]

5 голосов
/ 05 июля 2009

Я думаю, что предпочтительным методом для ситуации здесь является метод ".com" и ".exe". В Windows из командной строки, если вы запускаете программу и не указываете расширение, порядок расположения исполняемого файла будет иметь приоритет .com, а не файл .exe .

Затем вы можете использовать хитрости, чтобы этот .com был прокси для stdin / stdout / stderr и запустить файл с тем же именем .exe. Это дает поведение, позволяющее программе выполнять преформу в режиме командной строки при вызове из консоли (возможно, только при обнаружении определенных аргументов командной строки), при этом все еще имея возможность запускаться как приложение с графическим интерфейсом без консоли.

Существуют различные статьи, описывающие это, например, «Как сделать приложение как графическим, так и консольным приложением?» (см. ссылки в ссылке ниже).

Я разместил проект под названием dualsubsystem в коде Google , который обновляет старое решение Codeguru для этой техники и предоставляет исходный код и исполняемые файлы с примерами.

Надеюсь, это полезно!

3 голосов
/ 21 апреля 2009

Вы не можете. Смотрите эту статью Раймонда Чена:

Как написать программу, которая может быть запущена как консоль или приложение с графическим интерфейсом?

По причинам, указанным в этой статье, вы иногда видите две версии одного и того же инструмента, одна из которых снабжена суффиксом 'w', например, в java.exe и javaw.exe в Windows.

Однако вы можете реализовать этот умный обходной путь: Как создать приложение как с графическим интерфейсом, так и с консольным приложением .

1 голос
/ 21 апреля 2009

Вы пытались вызвать AttachConsole в своей программе, чтобы перенаправить вывод на вызывающий терминал?

0 голосов
/ 10 марта 2010

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

//Require at least Windows XP
#define _WIN32_WINNT 0x0501
...