Ответ 1
WinMain используется для приложения (окончание .exe), чтобы указать, что процесс запускается. Он предоставит аргументы командной строки для процесса и станет точкой входа для кода пользователя для процесса. WinMain (или другая версия main) также является необходимой функцией. Для запуска процесса требуется ОС для вызова.
DllMain используется для DLL, чтобы обозначать множество разных сценариев. Прежде всего, он будет вызываться, когда
- DLL загружается в процесс: DLL_PROCESS_ATTACH
- DLL выгружается из процесса: DLL_PROCESS_DETACH
- В процессе запускается поток: DLL_THREAD_ATTACH
- В процессе завершен поток: DLL_THREAD_DETACH
DllMain является необязательной конструкцией и имеет много неявных контрактов, связанных с ней. Например, вы не должны вызывать код, который заставит другую DLL загружаться. В общем, это довольно сложная функция, чтобы получить право, и ее следует избегать, если у вас нет особой необходимости.