一个可执行文件,它基于Visual Studio 2005中的命令行作为GUI应用程序或控制台应用程序启动

时间:2009-04-21 11:11:49

标签: c++ visual-studio qt visual-studio-2005

我在Qt中有一个Visual Studio 2005应用程序,它使用\subsystem:windows进行链接,这样当我运行已编译的可执行文件时,它也不会创建命令行终端。

我想创建一个命令行模式:当我使用--nogui命令行参数启动它时,不会显示GUI,而是运行一个简单的命令行程序。由于链接使用/subsystem:windows,因此除非我将可执行文件与std::cout链接,否则命令行模式不会显示任何\subsystem:console输出。

有没有办法设置编译/链接,以便相同的可执行文件可以呈现GUI窗口,或者根据命令行参数表现为控制台应用程序?

PS。我使用Qt 4.2.0和Visual Studio 2005,项目使用C ++。

4 个答案:

答案 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