正如微软自己所解释的那样,控制台程序使用 main()
,但非控制台 Win32 程序使用 WinMain()
作为入口点。事实上,在 Visual Studio 中在 Win32 项目中使用 main()
将导致链接器错误。
但是在 Qt 项目中,无论是从 Qt Creator 还是 Visual Studio 创建,GUI 程序像控制台程序一样使用 main()
。Qt 的开发人员是如何做到这一点的呢?
正如微软自己所解释的那样,控制台程序使用 main()
,但非控制台 Win32 程序使用 WinMain()
作为入口点。事实上,在 Visual Studio 中在 Win32 项目中使用 main()
将导致链接器错误。
但是在 Qt 项目中,无论是从 Qt Creator 还是 Visual Studio 创建,GUI 程序像控制台程序一样使用 main()
。Qt 的开发人员是如何做到这一点的呢?
qtbase/src/winmain/qtmain_win.cpp
中定义的WinMain()
,随后调用我们“虚构”的int main(int argc, char *argv[])
。main
还是 WinMain
都不是 Windows 的入口点,真正的入口点在 CRT 库内部。那个真正的入口点会调用你的 main
或者 WinMain
。这对于一些预主函数 CRT 初始化是必要的。main
。