DllMain

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

Essa função é um opcional método de entrada em um DLL.

Se a função for usada, ele é chamado, o sistema quando os processos e segmentos são inicializados e finalizados ou em chamadas para o LoadLibrary e FreeLibrary funções.

DllMain é um espaço reservado para o nome função Library-defined.

Você deve especificar o nome que você usa quando você compilar o DLL.

Para obter mais informações, consulte a documentação incluída ferramentas de desenvolvimento.

Syntax

BOOL WINAPI DllMain(
  HANDLE hinstDLL,
  DWORD dwReason,
  LPVOID lpvReserved
);

Parameters

  • hinstDLL
    [no] Identificador para o DLL.

    O valor é o endereço de base da DLL.

    O HINSTANCE de uma DLL é o mesmo que a HMODULE do DLL, portanto, hinstDLL Pode ser usado em chamadas subseqüentes para a função GetModuleFileName e outras funções que exijam um identificador módulo.

  • dwReason
    [no] Especifica um sinalizador que indica o motivo a entrada DLL-apontar função está sendo chamado.

    Este parâmetro pode ser definido como um do seguinte valores.

    Valor Descrição

    DLL_PROCESS_ATTACH

    Indica que o DLL está sendo carregado para o espaço de endereço virtual do atual processo as a result of iniciando o processo ou as a result of um chamar para LoadLibrary.

    As DLLs podem usar essa oportunidade para inicializar instância dados ou para usar a função TlsAlloc para alocar um local segmento índice armazenamento (TLS).

    Se você recebe segmento criação e exclusão notificações, um DLL carregado de kernel não é chamado DisableThreadLibraryCalls. Notificação DLL no kernel afeta desempenho. Portanto, se um DLL é carregado no kernel e o DLL não precisa para get uma notificação sair segmento, o DLL deve chamar o DisableThreadLibraryCalls função no DLL_PROCESS_ATTACH.

    DLL_THREAD_ATTACH

    Indica que o atual processo é criar um segmento.

    Quando isso ocorre, o sistema chamadas de entrada-função apontar de todas as DLLs anexado para o processo. O chamar é feita no contexto do novo segmento.

    As DLLs podem usar essa oportunidade para inicializar um slot TLS para o segmento.

    Um chamado segmento a entrada DLL-função apontar com DLL_PROCESS_ATTACH não chamar a entrada DLL-função apontar com DLL_THREAD_ATTACH.

    Observação

    O ponto de entrada de um função de DLL é chamado com este valor somente por segmentos criados após o DLL é carregado pelo processo.

    Observação

    Quando um DLL é carregado usando LoadLibrary, segmentos existentes não chamar a entrada-função apontar do DLL recém-carregada.

    DLL_PROCESS_DETACH

    Indica que o DLL está sendo descarregado a partir de espaço de endereço virtual de processo de chamada as a result of em um processo sair ou um chamar para FreeLibrary.

    O DLL pode usar essa oportunidade para chamar a função TlsFree para livre índices TLS alocados pelo uso TlsAlloc e para livre segmento-local dados.

    DLL_THREAD_DETACH

    Indica que um segmento é sair corretamente.

    Se o DLL tiver armazenado um ponteiro para memória alocada em um slot TLS, ele usará essa oportunidade para a memória livre.

    O sistema chamadas de entrada-função apontar de todos os carregado DLLs com esse valor.

    O chamar é feita no contexto do segmento de saída.

  • lpvReserved
    [no] Especifica mais aspectos de inicialização DLL e limpeza.

    Se dwReason é DLL_PROCESS_ATTACH, lpvReserved é NULL para dinâmico carrega e nonnull para carregamentos estáticos.

    Se dwReason é DLL_PROCESS_DETACH, lpvReserved é NULL se DllMain é chamado usando FreeLibrary e se nonnull DllMain é chamado durante terminação processo.

Return Value

Quando o sistema chama o DllMain função com o valor DLL_PROCESS_ATTACH, a função retorna FALSE ou TRUE se ele for bem sucedida se inicialização falhar.

Se o valor de retorno é FALSE quando DllMain é chamado porque o processo usa o LoadLibrary função, LoadLibrary retorna NULL.

Se o valor de retorno é FALSE quando DllMain é chamado durante inicialização processo, o processo termina com um erro. Para informações de erro estendidas get, chamar GetLastError.

Quando o sistema chama o DllMain função com um valor Other Than DLL_PROCESS_ATTACH, o valor de retorno será ignorada.

Remarks

Durante inicialização inicial processo ou após um chamar para LoadLibrary, o sistema verifica a lista de DLLs carregadas para o processo.

Para cada DLL que não é chamado com o valor DLL_PROCESS_ATTACH, o sistema chamadas de entrada-função apontar da DLL. Este chamar é feita no contexto do segmento que causou o espaço de endereço processo para alteração, such as o primário segmento do processo ou o segmento que chamado LoadLibrary.

Há casos quando a entrada-função apontar é chamado para um terminação se mesmo segmento a DLL nunca anexado para o segmento — de exemplo, se a entrada-função apontar não foi chamado com o valor DLL_THREAD_ATTACH no contexto do segmento nestas situações:

  • O segmento foi o segmento inicial no processo, portanto, chamado de sistema de entrada-função apontar com o valor DLL_PROCESS_ATTACH.
  • O segmento já foi execução quando um chamar para o LoadLibrary função foi feita, isso o sistema nunca chamado de entrada-função apontar para ele.

Quando um DLL é descarregado de um processo as a result of terminação processo ou as a result of um chamar para FreeLibrary, o sistema não chamar a entrada-função apontar do DLL com o valor DLL_THREAD_DETACH para a individual segmentos do processo. O DLL só recebe notificação DLL_PROCESS_DETACH.

As DLLs podem levar essa oportunidade para limpar recursos para segmentos conhecidos a DLL.

Em anexar, o corpo da sua entrada DLL-apontar função deve executar inicialização simples apenas tarefas, such as o seguinte:

  • Configurando segmento local armazenamento (TLS).
  • Criando objetos sincronização.
  • Abrindo arquivos.

Fazer não chamar LoadLibrary Na entrada-função apontar, porque você pode criar loops dependência na ordem de carregar DLL. Essa pode causar um DLL a ser usado antes o sistema executa codificar sua inicialização.

Da mesma forma, fazer não chamar o FreeLibrary função na entrada-função apontar em desanexar, porque isso pode causar um DLL a serem usados após o sistema executa sua codificar terminação.

Funções Calling Microsoft® Win32® Other Than TLS, objeto-criação e arquivo funções podem causar problemas que são difíceis de serem diagnosticar.

De exemplo, funções de usuário, Shell, COM e Soquetes do Windows chamado (ou funções que chamar essas funções) pode causar erros violação de acesso, porque seu chamar DLLs LoadLibrary Para carregar outros componentes sistema.

Embora seja aceitável para criar objetos sincronização em DllMain, fazer não executar sincronização em DllMain (ou uma função chamado por DllMain), porque todos chama para DllMain São serializado. Aguardando em objetos sincronização DllMain pode causar um bloqueio.

Para fornecer inicialização mais complexa, crie uma rotina inicialização para o DLL.

Você pode exigir aplicativos para chamar a rotina inicialização antes chamado outras rotinas na DLL. Caso contrário, você pode ter a rotina inicialização criar um nomeado mutex, e tiver cada rotina na chamar DLL da rotina de inicialização se o mutex não existe.

Requirements

Header winbase.h
Library coredll.lib
Windows Embedded CE Windows CE 1.0 and later
Windows Mobile Windows Mobile Version 5.0 and later

See Also

Reference

DLL Functions
FreeLibrary
GetModuleFileName
LoadLibrary
TlsAlloc
TlsFree