В чем разница между тремя функциями и когда их использовать??
Разница между WinMain, main и DllMain в С++
Ответы (3)
WinMain используется для приложения (окончание .exe), чтобы указать, что процесс запускается. Он предоставляет аргументы командной строки для процесса и служит точкой входа пользовательского кода для процесса. WinMain (или другая версия main) также является обязательной функцией. ОС нужна функция для вызова, чтобы запустить запущенный процесс.
DllMain используется для DLL, чтобы обозначить множество различных сценариев. В частности, он будет вызываться, когда
- DLL загружается в процесс: DLL_PROCESS_ATTACH
- DLL выгружается из процесса: DLL_PROCESS_DETACH
- В процессе запускается поток: DLL_THREAD_ATTACH
- Поток завершен в процессе: DLL_THREAD_DETACH
DllMain — необязательная конструкция, с которой связано множество неявных контрактов. Например, вы не должны вызывать код, который заставит загрузить другую DLL. В общем, это довольно сложная функция, и ее следует избегать, если у вас нет особой потребности в ней.
main() означает, что ваша программа является консольным приложением.
WinMain() означает, что программа представляет собой приложение с графическим интерфейсом пользователя, т. е. , он отображает окна и диалоговые окна вместо отображения консоли.
DllMain() означает, что программа является DLL. Библиотека DLL не может быть запущена напрямую, но используется двумя вышеупомянутыми типами приложений.
Следовательно:
- Используйте WinMain, когда вы пишете программу, которая будет отображать окна и т. д.
- Используйте DLLMain при написании DLL.
- Используйте main во всех остальных случаях.
main
. нет технических причин для использования нестандартных функций запуска.
- person Cheers and hth. - Alf; 14.12.2012
[Дополнение к вашему вопросу]
Также не забудьте DllEntryPoint:
Когда речь идет о времени загрузки, точкой входа является DllMain.
(например, внутрипроцессная серверная DLL COM).Когда задействовано время выполнения, точкой входа является DllEntryPoint.
(Например, вызывается LoadLibrary).