去掉 WinMain 和控制台窗口
分类:技术
微软什么的最讨厌啦~写个 GUI 程序要么带个控制台窗口,要么就得用非主流的 WinMain
函数作入口。
用 gcc 的话,这其实不是个问题,带上一个 -mwindows
参数即可顺利解决掉控制台窗口并且抛弃 WinMain
。
而到了 Visual Studio,似乎很两难:
- Linker 参数中 SubSystem 选择 Windows 可以去除控制台窗口,但会要求用
WinMain
作入口。 - Linker 参数中 SubSystem 选择 Console 可以使用
main
作入口,但会自带控制台窗口。
于是困惑了。好在今天在 Irrlicht 的教程中见到了解法:
Linker 参数中的 SubSystem 继续选择 Windows,与此同时将 Entry Point 设置为 mainCRTStartup 即可兼得鱼和熊掌。
以命令行参数形式就是:/SUBSYSTEM:windows /ENTRY:mainCRTStartup
要点就是 ENTRY 参数有三种:mainCRTStartup、WinMainCRTStartup、和 _DllMainCRTStartup,分别对应调用 main
、WinMain
、和 DllMain
,默认是根据 /DLL 和 /SUBSYSTEM 参数自动选择的。
以上。