微软什么的最讨厌啦~写个 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 参数自动选择的。

#ifdef _DEBUG
    #ifdef UNICODE
        #pragma comment(linker, "/subsystem:\"console\" /entry:\"wWinMainCRTStartup\"")
    #else
        #pragma comment(linker, "/subsystem:\"console\" /entry:\"WinMainCRTStartup\"")
    #endif
#endif

标签: none

评论已关闭