感谢您的时间。我用netbeans编写简单的C ++ hello world程序。它与netbeans一起运行良好。我用MinGW编译并运行myprogram.exe。当时它与CMD一起开放。如何阻止这个CMD?这是我的简单代码。
#include <windows.h>
int main()
{
MessageBox(NULL, "Hello world","Warning!",
MB_ICONEXCLAMATION | MB_OK);
}
答案 0 :(得分:3)
我已经找到了你的问题的合理副本,但只找到了有关假情报答案的问题。这样:
您看到的窗口不是命令解释器,它是命令解释程序使用的种的窗口。这些称为控制台窗口。您的可执行文件会生成一个新的控制台窗口,因为它默认标记为需要一个,因此当它不在控制台窗口中运行时,Windows会为它创建一个新的控制台窗口。
标记是可执行文件标题中的一个值,称为 Windows子系统,它确定Windows需要哪些基本服务,Windows应如何处理它。默认情况下,MinGW工具(以及标准代码,Microsoft的工具)使用控制台子系统生成可执行文件。通常,用于普通应用程序的唯一其他子系统是 GUI子系统,它就像控制台子系统一样,只是它说控制台窗口不是必需的。
使用MinGW g ++,您可以使用半文档选项 -mwindows
来生成带有GUI子系统的可执行文件。
或者,您可以为链接器指定 [1] ,例如 -Wl,-subsystem,windows
。
显然,在NetBeans中,您必须修改项目属性中的编译器/链接器选项。
使用其他IDE,它可以像通过复选框或列表选择子系统一样简单。
使用MinGW工具,您可以通过objdump
实用程序检查子系统。还有其他方式。但是,使用objdump
:
C:\my\forums\so\070>objdump -p a.exe | find /i "sub" MajorSubsystemVersion 5 MinorSubsystemVersion 2 Subsystem 00000003 (Windows CUI) C:\my\forums\so\070>g++ foo.cpp -mwindows C:\my\forums\so\070>objdump -p a.exe | find /i "sub" MajorSubsystemVersion 5 MinorSubsystemVersion 2 Subsystem 00000002 (Windows GUI) C:\my\forums\so\070> _
使用Microsoft的工具,您可以类似地使用他们的dumpbin
实用程序。
还有许多其他标头转储实用程序,但 [2] Windows本身不会显示可执行文件的子系统。
使用Microsoft的工具,没有像g ++ -mwindows
这样的编译器选项,但是有一个子系统链接器选项,/subsystem:windows
。使用此标准和符合标准的代码,还必须将机器代码级别入口点指定为调用标准main
的代码。即,链接器选项/entry:mainCRTStartup
。
C:\my\forums\so\070>cl std.cpp /Feb std.cpp C:\my\forums\so\070>dumpbin /headers b.exe | find /i "sub" 6.00 subsystem version 3 subsystem (Windows CUI) C:\my\forums\so\070>cl std.cpp /Feb /link /subsystem:windows /entry:mainCRTStartup std.cpp C:\my\forums\so\070>dumpbin /headers b.exe | find /i "sub" 6.00 subsystem version 2 subsystem (Windows GUI) C:\my\forums\so\070> _
对于在命令行中工作,使用LINK
环境变量可以稍微简化一下。
许多人更喜欢使用Microsoft的monstrosity main
函数替换,称为WinMain
。这指导Microsoft的链接器默认采用GUI子系统。当人们希望从代码的角度来看没有意义,并且不可移植时(特别是g ++接受函数但忽略它),这使得控制器子系统很难构建 [3] 子系统提示),以及可怕的冗长。
[1] -mwindows
选项通常会添加一些常用的Windows API库,而不是由简单的子系统链接器选项添加。您可以通过-dumpspecs
选项转储配置来检查哪些库
[2] 我在这里谈论现代Windows。在20世纪90年代后期,Windows 9.x确实通过其(现已停止的)“快速查看”功能呈现了子系统值。对于可执行文件,显然只显示了dumpbin
的完整文本输出
[3] 使用Microsoft的工具,指定了WinMain
主函数和控制台子系统,默认情况下,链接器会抱怨缺少main
。然后,一个修复是链接器选项/entry:WinMainCRTStartup
。
功能
答案 1 :(得分:0)
忽略cmd窗口的一种方法是使用以下命令以静默方式运行它:
cmd / c yourprogram.exe
这仍将运行程序,但命令提示符不会显示。