【发布时间】:2011-06-21 13:05:20
【问题描述】:
这不是另一个经常讨论的“我的 GUI 应用程序中需要一个控制台”。我的情况与此不同。
我有一个从命令行运行的 Windows GUI 应用程序。现在,如果您向此应用程序传递错误的参数,我确实不希望出现一个弹出窗口来说明可能的开关,但我希望将其打印到产生我的进程的控制台中。
我已经做到了可以打印到控制台(为父进程调用 AttachConsole(...)),但问题是我的应用程序没有“阻塞”。一旦我启动它,命令提示符就会返回,并且所有输出都会写入这个窗口(参见附图以进行说明)。
我玩了一下,创建了一个控制台应用程序,运行它,然后看到那里,它“阻塞”了,提示仅在应用程序终止后重新出现。将我的 GUI 应用程序切换到 /SUBSYSTEM:Console 会导致奇怪的错误(MSVCRTD.lib(crtexe.obj):错误 LNK2019:函数“___tmainCRTStartup”中未解析的外部符号“_main”。)
我已经看到来自 MSDEV 的带有“.exe”和“.com”文件方法的管道方法,但我觉得它很糟糕。有没有办法解决这个更漂亮的问题?
【问题讨论】:
-
更改为控制台子系统听起来是正确的做法。不过,您必须更改主声明以与控制台应用程序保持一致。除了 AFAIK 之外,您将无法使用 WinMain 阻止它,因为命令行刚刚启动它。
-
切换到控制台子系统还有其他副作用。如果从快捷方式而不是控制台窗口启动,它将创建一个新控制台,即使快捷方式提供了正确的参数。
标签: winapi console-application