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

时间:2009-01-06 14:31:05

标签: c++ windows entry-point winmain

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

3 个答案:

答案 0 :(得分:21)

main()表示您的计划是console application

WinMain()表示程序是GUI application - 也就是说,它显示窗口和对话框而不是显示控制台。

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

因此:

  • 在编写要显示窗口等的程序时使用WinMain。
  • 编写DLL时使用DLLMain。
  • 在所有其他情况下使用main。

答案 1 :(得分:8)

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

DllMain用于DLL表示许多不同的场景。最值得注意的是,它将在

时调用
  1. 将DLL加载到进程中:DLL_PROCESS_ATTACH
  2. 从进程中卸载DLL:DLL_PROCESS_DETACH
  3. 在此过程中启动一个线程:DLL_THREAD_ATTACH
  4. 线程在此过程中结束:DLL_THREAD_DETACH
  5. DllMain是一个可选构造,并且有很多与之关联的隐式契约。例如,您不应该调用将强制加载另一个DLL的代码。一般来说,正确的功能是相当困难的,应该避免,除非你有一个非常具体的需要。

答案 2 :(得分:0)

[您的问题的附录]

也不要忘记DllEntryPoint:

  • 涉及加载时间时,入口点是DllMain。
    (例如COM进程内服务器DLL)。

  • 涉及运行时间时,入口点是DllEntryPoint。
    (例如,调用LoadLibrary)。