25

这三个功能有什么区别以及何时使用它们?

4

3 回答 3

22

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

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

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

所以:

  • 在编写要显示窗口等的程序时使用 WinMain。
  • 编写 DLL 时使用 DLLMain。
  • 在所有其他情况下使用 main。
于 2009-01-06T14:37:32.523 回答
10

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

DllMain 用于 DLL 以表示许多不同的场景。最值得注意的是,它会在什么时候被调用

  1. DLL被加载到进程中:DLL_PROCESS_ATTACH
  2. DLL 从进程中卸载:DLL_PROCESS_DETACH
  3. 进程中启动了一个线程:DLL_THREAD_ATTACH
  4. 一个线程在进程中结束:DLL_THREAD_DETACH

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

于 2009-01-06T14:36:40.780 回答
0

[您问题的补充]

也不要忘记 DllEntryPoint:

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

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

于 2018-07-05T08:17:44.760 回答