首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinMain与main (C++)

WinMain与main (C++)
EN

Stack Overflow用户
提问于 2013-09-10 09:22:19
回答 2查看 14.7K关注 0票数 9

我是C++的新手,但以前做过一些.NET编程。

main(...)WinMain(...)之间有什么区别,我之前用main(...)编写了一个程序,并且能够像使用WinMain(...)一样很好地调用Win32函数,所以这让我问:“在哪里使用一个比另一个更好,或者这有什么区别吗?”

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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启动一个图形用户界面应用程序),但是“在罗马,就像罗马人做的那样”--也就是说,通常最好遵循平台的用法,以避免让其他开发人员感到困惑,并通过未经测试/不受支持的编译器设置来更改入口点的签名。

票数 21
EN

Stack Overflow用户

发布于 2013-09-10 09:28:09

WinMain()是特定于Windows的基于windows的图形应用程序的入口点(您有windows的东西)。main()是一个标准的C++入口点(在Windows中,它是一个基于控制台的应用程序)……

也就是说,您可以在控制台应用程序中使用GUI内容,并在GUI应用程序中分配控制台。

我推荐阅读MSDN上的consolesGUI applications

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18709403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档