Diferença entre WinMain, principal e DllMain em C ++
-
03-07-2019 - |
Pergunta
Qual é a diferença entre as três funções e quando usá-los ??
Solução
WinMain é usado para uma aplicação (que termina exe) para indicar que o processo está a começar. Ele vai proporcionar argumentos de linha de comando para o processo e serve como o ponto de entrada de código de utilizador para um processo. WinMain (ou uma versão diferente do principal) é também uma função requerida. O sistema operacional precisa de uma função a ser chamada, a fim de start um processo em execução.
DllMain é usado para uma DLL para significar um monte de diferentes cenários. Mais notavelmente, ele será chamado quando
- O DLL é carregada para o processo: DLL_PROCESS_ATTACH
- A DLL é descarregado do processo: DLL_PROCESS_DETACH
- Um fio é iniciado no processo: DLL_THREAD_ATTACH
- Uma linha é finalizada no processo: DLL_THREAD_DETACH
DllMain é uma construção opcional e tem um monte de contratos implícitos associados. Por exemplo, você não deve estar chamando código que irá forçar outra DLL de carga. Em geral, é função bastante difícil de obter direito e deve ser evitado a menos que você tem uma necessidade muito específica para isso.
Outras dicas
main () significa que o seu programa é uma consola aplicação .
WinMain () significa que o programa é um GUI aplicação - -. isto é, ele exibe janelas e caixas de diálogo em vez de mostrar consola
DllMain () significa que o programa é um DLL . Uma DLL não pode ser executado diretamente, mas é usada por estes dois tipos de aplicações.
Por isso:
- Use WinMain quando você está escrevendo um programa que vai exibir janelas etc.
- Use DLLMain quando você escrever uma DLL.
- Use principal em todos os outros casos.
[Adenda à sua pergunta]
Também não se esqueça do DllEntryPoint:
-
Quando o tempo de carregamento está envolvido o ponto de entrada é DllMain.
(COM DLL servidor Ex. No processo). -
Ao executar o tempo está envolvido o ponto de entrada é DllEntryPoint.
(Ex. LoadLibrary são chamados).