我是C++的新手,但以前做过一些.NET编程。
main(...)和WinMain(...)之间有什么区别,我之前用main(...)编写了一个程序,并且能够像使用WinMain(...)一样很好地调用Win32函数,所以这让我问:“在哪里使用一个比另一个更好,或者这有什么区别吗?”
发布于 2013-09-10 09:29:46
谈到微软的工具链,传统上,Win32图形应用程序总是从WinMain开始,而main则用于控制台应用程序。
这两种应用程序之间的区别实际上(主要)归结为可执行文件中的单个设置,而不是在功能上( GUI应用程序可以创建控制台,而控制台应用程序可以创建窗口),而是在加载器的行为上:对于标记为GUI的exe,加载器不会分配任何控制台,而控制台exe将附加到父控制台或在没有控制台时创建一个新的控制台。
对于入口点名称,这完全是链接器/CRT默认值的问题:可执行文件的“真正”入口点只是最终可执行文件的一个偏移量,它指向一个不带参数的函数。这是CRT做自己的事情,确定参数,然后调用“你的”入口点,所以,在原则上,它们可以完全相同的方式工作。
关键是,CRT查找的默认入口点的名称/签名取决于您正在构建的应用程序的类型;如果编译器和链接器设置为构建控制台应用程序,则它们将为使用WinMain的图形用户界面应用程序查找main (或wmain或_tmain,取决于Unicode设置),为dll查找dll。
所以:
如果您正在为dll的控制台application;
DllMain构建图形用户界面(=在启动时没有为其创建控制台) application;
main,则WinMain。再说一次,这一切都不是一成不变的(有很多方法可以从一个标准的main启动一个图形用户界面应用程序),但是“在罗马,就像罗马人做的那样”--也就是说,通常最好遵循平台的用法,以避免让其他开发人员感到困惑,并通过未经测试/不受支持的编译器设置来更改入口点的签名。
发布于 2013-09-10 09:28:09
WinMain()是特定于Windows的基于windows的图形应用程序的入口点(您有windows的东西)。main()是一个标准的C++入口点(在Windows中,它是一个基于控制台的应用程序)……
也就是说,您可以在控制台应用程序中使用GUI内容,并在GUI应用程序中分配控制台。
我推荐阅读MSDN上的consoles和GUI applications。
https://stackoverflow.com/questions/18709403
复制相似问题