Search code examples
c++windowsentry-pointwinmain

Difference between WinMain,main and DllMain in C++


What is the difference between the three functions and when to use them??


Solution

  • WinMain is used for an application (ending .exe) to indicate the process is starting. It will provide command line arguments for the process and serves as the user code entry point for a process. WinMain (or a different version of main) is also a required function. The OS needs a function to call in order to start a process running.

    DllMain is used for a DLL to signify a lot of different scenarios. Most notably, it will be called when

    1. The DLL is loaded into the process: DLL_PROCESS_ATTACH
    2. The DLL is unloaded from the process: DLL_PROCESS_DETACH
    3. A thread is started in the process: DLL_THREAD_ATTACH
    4. A thread is ended in the process: DLL_THREAD_DETACH

    DllMain is an optional construct and has a lot of implicit contracts associated with it. For instance, you should not be calling code that will force another DLL to load. In general it's fairly difficult function to get right and should be avoided unless you have a very specific need for it.