Sobre bibliotecas de Dynamic-Link
A vinculação dinâmica permite que um módulo inclua apenas as informações necessárias para localizar uma função de DLL exportada no tempo de carregamento ou no tempo de execução. A vinculação dinâmica difere da vinculação estática mais familiar, na qual o vinculador copia o código de uma função de biblioteca em cada módulo que a chama.
Tipos de vinculação dinâmica
Há dois métodos para chamar uma função em uma DLL:
- Na vinculação dinâmica de tempo de carga, um módulo faz chamadas explícitas para funções de DLL exportadas como se fossem funções locais. Isso exige que você vincule o módulo à biblioteca de importação para a DLL que contém as funções. Uma biblioteca de importação fornece ao sistema as informações necessárias para carregar a DLL e localizar as funções de DLL exportadas quando o aplicativo é carregado.
- Na vinculação dinâmica em tempo de execução, um módulo usa a função LoadLibrary ou LoadLibraryEx para carregar a DLL em tempo de execução. Depois que a DLL é carregada, o módulo chama a função GetProcAddress para obter os endereços das funções de DLL exportadas. O módulo chama as funções de DLL exportadas usando os ponteiros de função retornados por GetProcAddress. Isso elimina a necessidade de uma biblioteca de importação.
DLLs e gerenciamento de memória
Cada processo que carrega a DLL o mapeia para seu espaço de endereço virtual. Depois que o processo carrega a DLL em seu endereço virtual, ele pode chamar as funções de DLL exportadas.
O sistema mantém uma contagem de referência por processo para cada DLL. Quando um thread carrega a DLL, a contagem de referência é incrementada em um. Quando o processo é encerrado ou quando a contagem de referência se torna zero (somente vinculação dinâmica em tempo de execução), a DLL é descarregada do espaço de endereço virtual do processo.
Como qualquer outra função, uma função de DLL exportada é executada no contexto do thread que a chama. Portanto, as seguintes condições se aplicam:
- Os threads do processo que chamou a DLL podem usar identificadores abertos por uma função DLL. Da mesma forma, os identificadores abertos por qualquer thread do processo de chamada podem ser usados na função DLL.
- A DLL usa a pilha do thread de chamada e o espaço de endereço virtual do processo de chamada.
- A DLL aloca memória do espaço de endereço virtual do processo de chamada.
Para obter mais informações sobre DLLs, consulte os seguintes tópicos:
- Vantagens da vinculação dinâmica
- Criação de biblioteca de vínculo dinâmico
- Função Entry-Point biblioteca de vínculo dinâmico
- Vinculação dinâmica de tempo de carregamento
- Vinculação dinâmica em tempo de execução
- Ordem de pesquisa da biblioteca de vínculo dinâmico
- Dados da biblioteca de vínculo dinâmico
- Redirecionamento da biblioteca de vínculo dinâmico
- Biblioteca de Vínculo Dinâmico Atualizações
- Segurança da biblioteca de vínculo dinâmico
- DLLs AppInit e Inicialização Segura