Разница между WinMain, main и DllMain в С++

В чем разница между тремя функциями и когда их использовать?

Ответ 1

WinMain используется для приложения (окончание .exe), чтобы указать, что процесс запускается. Он предоставит аргументы командной строки для процесса и станет точкой входа для кода пользователя для процесса. WinMain (или другая версия main) также является необходимой функцией. Для запуска процесса требуется ОС для вызова.

DllMain используется для DLL, чтобы обозначать множество разных сценариев. Прежде всего, он будет вызываться, когда

  • DLL загружается в процесс: DLL_PROCESS_ATTACH
  • DLL выгружается из процесса: DLL_PROCESS_DETACH
  • В процессе запускается поток: DLL_THREAD_ATTACH
  • В процессе завершен поток: DLL_THREAD_DETACH

DllMain является необязательной конструкцией и имеет много неявных контрактов, связанных с ней. Например, вы не должны вызывать код, который заставит другую DLL загружаться. В общем, это довольно сложная функция, чтобы получить право, и ее следует избегать, если у вас нет особой необходимости.

Ответ 2

main() означает, что ваша программа представляет собой консольное приложение .

WinMain() означает, что программа является графическим приложением - то есть она отображает окна и диалоговые окна вместо показа консоли.

DllMain() означает, что программа является DLL. DLL не может запускаться напрямую, но используется этими двумя типами приложений.

Следовательно:

  • Используйте WinMain, когда вы пишете программу, которая будет отображать окна и т.д.
  • Используйте DLLMain при написании библиотеки DLL.
  • Используйте main во всех остальных случаях.