当前位置:  开发笔记 > 编程语言 > 正文

WinMain,main和Cll中的DllMain之间的区别

如何解决《WinMain,main和Cll中的DllMain之间的区别》经验,为你挑选了2个好方法。

这三个函数之间有什么区别以及何时使用它们?



1> Frederick Th..:

main()表示您的程序是控制台应用程序.

WinMain()表示程序是一个GUI应用程序 - 也就是说,它显示窗口和对话框而不是显示控制台.

DllMain()表示程序是DLL.DLL不能直接运行,但由上述两种应用程序使用.

因此:

在编写要显示窗口等的程序时使用WinMain.

编写DLL时使用DLLMain.

在所有其他情况下使用main.


@Shy:使用rundll32.exe运行DLL是间接运行DLL.;)
WinMain只是意味着没有为应用程序分配控制台窗口,它的stdin和stdout无处可去.Windows API的所有内容(例如事件循环,类的注册,窗口创建)仍然需要手动完成.此外,使用main()的程序也可以有窗口.
-1"main()表示您的程序是控制台应用程序." 是不正确的.我的GUI子系统程序总是使用标准的`main`.使用非标准启动功能没有技术原因.
以下是来自Windows开发人员的相同主题的帖子http://blogs.msdn.com/oldnewthing/archive/2009/01/01/9259142.aspx

2> JaredPar..:

WinMain用于应用程序(结束.exe)以指示进程正在启动.它将为进程提供命令行参数,并充当进程的用户代码入口点.WinMain(或不同版本的main)也是必需的功能.操作系统需要调用函数才能启动进程运行.

DllMain用于DLL表示许多不同的场景.最值得注意的是,它何时会被调用

    DLL被加载到进程中:DLL_PROCESS_ATTACH

    DLL从进程中卸载:DLL_PROCESS_DETACH

    在该过程中启动一个线程:DLL_THREAD_ATTACH

    线程在进程中结束:DLL_THREAD_DETACH

DllMain是一个可选的构造,并且有很多与之相关的隐式契约.例如,您不应该调用将强制加载另一个DLL的代码.一般来说,正确的功能是相当困难的,应该避免,除非你有一个非常具体的需要.


-1"WinMain(或不同版本的main)也是必需的功能"是错误的.它不是Windows的东西,它是Microsoft语言扩展的东西.而且微软的工具甚至都不需要它.并且,操作系统不会调用它.它由进程的入口点函数调用.
推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有