我在Qt中有一个Visual Studio 2005应用程序,它使用\subsystem:windows
进行链接,这样当我运行已编译的可执行文件时,它也不会创建命令行终端。
我想创建一个命令行模式:当我使用--nogui
命令行参数启动它时,不会显示GUI,而是运行一个简单的命令行程序。由于链接使用/subsystem:windows
,因此除非我将可执行文件与std::cout
链接,否则命令行模式不会显示任何\subsystem:console
输出。
有没有办法设置编译/链接,以便相同的可执行文件可以呈现GUI窗口,或者根据命令行参数表现为控制台应用程序?
PS。我使用Qt 4.2.0和Visual Studio 2005,项目使用C ++。
答案 0 :(得分:5)
我认为这种情况的首选技术是“.com”和“。exe”方法。在Windows中,从命令行开始,如果运行程序但未指定扩展名,则查找可执行文件的优先顺序为.com preferred over a .exe file。
然后你可以使用技巧让“.com”成为stdin / stdout / stderr的代理并启动同名的.exe文件。这提供了允许程序在从控制台调用时以命令行模式执行的行为(可能仅在检测到某些命令行参数时),同时仍然能够作为没有控制台的GUI应用程序启动。
有各种文章描述这一点,例如“如何将应用程序同时作为GUI和控制台应用程序?” (参见下面链接中的参考文献)。
我托管了一个名为dualsubsystem on google code的项目,该项目更新了此技术的旧codeguru解决方案,并提供了源代码和工作示例二进制文件。
我希望这有用!
答案 1 :(得分:3)
你做不到。请参阅Raymond Chen撰写的这篇文章:
How do I write a program that can be run either as a console or a GUI application?
由于本文中给出的原因,您有时会看到提供相同工具的两个版本,一个带有'w'后缀,例如在Windows上的java.exe和javaw.exe中。
但是,您可以实施这个聪明的解决方法:How to make an application as both GUI and Console application。
答案 2 :(得分:1)
您是否尝试在程序中调用AttachConsole
以将输出重定向到主叫终端?
答案 3 :(得分:0)
要使用AttachConsole,您需要在包含< windows.h>之前包含以下行:
//Require at least Windows XP
#define _WIN32_WINNT 0x0501