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

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

3 ответа

Решение

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 загружаться. В общем, это довольно сложная функция, чтобы получить права, и ее следует избегать, если у вас нет особой необходимости в этом.

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

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

DllMain () означает, что программа является DLL. DLL не может быть запущена напрямую, но используется двумя вышеупомянутыми приложениями.

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

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

[Приложение к вашему вопросу]

Также не забудьте DllEntryPoint:

  • Когда время загрузки задействовано, точкой входа является DllMain.
    (Например, DLL внутрипроцессного сервера).

  • Когда задействовано время выполнения, точкой входа является DllEntryPoint.
    (Например, LoadLibrary вызывать).

Другие вопросы по тегам