代码之家  ›  专栏  ›  技术社区  ›  balint.miklos

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

  •  4
  • balint.miklos  · 技术社区  · 17 年前

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

    我想创建一个命令行模式:当我用 --nogui 命令行参数,则不显示GUI,而是运行一个简单的命令行程序。因为链接使用 /subsystem:windows ,命令行模式不显示 std::cout 输出,除非我将可执行文件链接到 \subsystem:console .

    有没有一种方法可以设置编译/链接,使相同的可执行文件既可以显示GUI窗口,也可以根据命令行参数充当控制台应用程序?

    我使用Qt4.2.0和VisualStudio 2005,项目是C++。

    4 回复  |  直到 12 年前
        1
  •  5
  •   Community Mohan Dere    9 年前

    我认为在这种情况下,首选的技术是“.com”和“.exe”方法。在命令行的Windows中,如果运行程序而不指定扩展名,则定位可执行文件的优先顺序将 .com preferred over a .exe file .

    然后,您可以使用技巧让“.com”成为stdin/stdout/stderr的代理,并启动同一个名为.exe的文件。这使得在从控制台调用时(可能只有在检测到某些命令行参数时)允许程序以命令行模式执行,同时仍然能够作为一个没有控制台的GUI应用程序启动。

    有很多文章对此进行了描述,比如“如何将应用程序同时作为GUI和控制台应用程序?”(参见下面链接中的参考文献)。

    我主持了一个叫做 dualsubsystem on google code 它更新了该技术的一个旧的代码专家解决方案,并提供了源代码和工作示例二进制文件。

    希望对你有所帮助!

        2
  •  3
  •   Dirk Vollmar    17 年前

    你看不到。这篇文章是陈瑞蒙的:

    How do I write a program that can be run either as a console or a GUI application?

    由于本文给出的原因,您有时会看到同一工具提供的两个版本,其中一个版本的后缀是“w”,例如在Windows上的java.exe和java w.exe中。

    不过,您可能会实现这种巧妙的变通方法: How to make an application as both GUI and Console application .

        3
  •  1
  •   Konrad Rudolph    17 年前

    你试过打电话吗 AttachConsole 在你的程序中把输出重定向到呼叫终端?

        4
  •  0
  •   Peter Mortensen Pieter Jan Bonestroo    12 年前

    要使用AttachConsole,在包含<windows.h>之前需要包含以下行:

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