Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
No Windows, uma biblioteca de vínculo dinâmico (DLL) é um tipo de arquivo executável que atua como uma biblioteca compartilhada de funções e recursos. A vinculação dinâmica é um recurso do sistema operacional. Ele permite que um executável chame funções ou use recursos armazenados em um arquivo separado. Essas funções e recursos podem ser compilados e implantados separadamente dos executáveis que os utilizam.
Uma DLL não é um executável autônomo. As DLLs são executadas no contexto dos aplicativos que as chamam. O sistema operacional carrega a DLL no espaço de memória de um aplicativo. Isso é feito quando o aplicativo é carregado (vinculação implícita) ou sob demanda em tempo de execução (vinculação explícita). As DLLs também facilitam o compartilhamento de funções e recursos entre executáveis. Vários aplicativos podem acessar o conteúdo de uma única cópia de uma DLL na memória ao mesmo tempo.
Diferenças entre ligação dinâmica e ligação estática
A vinculação estática copia todo o código objeto em uma biblioteca estática para os executáveis que o usam quando são construídos. A vinculação dinâmica inclui apenas as informações necessárias para o Windows em tempo de execução para localizar e carregar a DLL que contém um item de dados ou função. Quando você cria uma DLL, você também cria uma biblioteca de importação que contém essas informações. Quando você cria um executável que chama a DLL, o vinculador usa os símbolos exportados na biblioteca de importação para armazenar essas informações para o carregador do Windows. Quando o carregador carrega uma DLL, a DLL é mapeada no espaço de memória do seu aplicativo. Se presente, uma função especial na DLL, DllMain
, é chamada para fazer qualquer inicialização que a DLL exige.
Diferenças entre aplicativos e DLLs
Embora DLLs e aplicativos sejam módulos executáveis, eles diferem de várias maneiras. A diferença mais óbvia é que você não pode executar uma DLL. Do ponto de vista do sistema, existem duas diferenças fundamentais entre aplicações e DLLs:
Um aplicativo pode ter várias instâncias de si mesmo em execução no sistema simultaneamente. Uma DLL pode ter apenas uma instância.
Um aplicativo pode ser carregado como um processo. Ele pode possuir coisas como uma pilha, encadeamentos de execução, memória global, manipuladores de ficheiro e uma fila de mensagens. Uma DLL não pode ser proprietária dessas coisas.
Vantagens de usar DLLs
A vinculação dinâmica a código e recursos oferece várias vantagens em relação à vinculação estática:
A ligação dinâmica poupa memória e reduz a troca. Muitos processos podem usar uma DLL simultaneamente, compartilhando na memória uma única cópia das seções de uma DLL que são somente para leitura. Por outro lado, cada aplicativo criado usando uma biblioteca vinculada estaticamente tem uma cópia completa do código da biblioteca que o Windows deve carregar na memória.
A vinculação dinâmica economiza espaço em disco e largura de banda. Muitos aplicativos podem compartilhar uma única cópia da DLL no disco. Em contraste, cada aplicativo criado usando uma biblioteca de link estático tem o código da biblioteca vinculado em sua imagem executável. Isso usa mais espaço em disco e leva mais largura de banda para transferir.
Manutenção, correções de segurança e atualizações podem ser mais fáceis. Quando seus aplicativos usam funções comuns em uma DLL, você pode implementar correções de bugs e implantar atualizações para a DLL. Quando as DLLs são atualizadas, os aplicativos que as usam não precisam ser recompilados ou revinculados. Eles podem fazer uso da nova DLL assim que ela for implantada. Por outro lado, quando você faz correções no código objeto vinculado estaticamente, você deve revincular e reimplantar cada aplicativo que o usa.
Você pode usar DLLs para fornecer suporte pós-venda. Por exemplo, uma DLL de driver de vídeo pode ser modificada para suportar uma exibição que não estava disponível quando o aplicativo foi enviado.
Você pode usar links explícitos para descobrir e carregar DLLs em tempo de execução. Por exemplo, extensões de aplicativo que adicionam novas funcionalidades ao seu aplicativo sem recriá-lo ou reimplantá-lo.
A vinculação dinâmica facilita o suporte a aplicativos escritos em diferentes linguagens de programação. Programas escritos em diferentes linguagens de programação podem chamar a mesma função DLL, desde que os programas sigam a convenção de chamada da função. Os programas e a função DLL devem ser compatíveis das seguintes maneiras: A ordem na qual a função espera que os seus argumentos sejam colocados na pilha. Se é a função ou o aplicativo que são responsáveis pela limpeza da pilha. E se algum argumento é passado em registos.
A vinculação dinâmica fornece um mecanismo para estender as classes da biblioteca Microsoft Foundation Class (MFC). Você pode derivar classes das classes MFC existentes e colocá-las em uma DLL de extensão MFC para uso por aplicativos MFC.
A vinculação dinâmica facilita a criação de versões internacionais do seu aplicativo. As DLLs são uma maneira conveniente de fornecer recursos específicos da localidade, o que facilita muito a criação de versões internacionais de um aplicativo. Em vez de enviar muitas versões localizadas do seu aplicativo, você pode colocar as cadeias de caracteres e imagens para cada idioma em uma DLL de recurso separada. Em seguida, seu aplicativo pode carregar os recursos apropriados para essa localidade em tempo de execução.
Uma desvantagem potencial para usar DLLs é que o aplicativo não é independente. Depende da existência de um módulo DLL separado: um que você deve implantar ou verificar a si mesmo como parte da sua instalação.
Mais informações sobre como criar e usar DLLs
Os seguintes artigos fornecem informações detalhadas sobre como criar DLLs C/C++ no Visual Studio.
Passo a passo: Criando e usando uma biblioteca de vínculo dinâmico (C++)
Descreve como criar e usar uma DLL usando o Visual Studio.
Tipos de DLLs
Fornece informações sobre os diferentes tipos de DLLs que podem ser criadas.
Perguntas frequentes sobre DLL
Fornece respostas para perguntas frequentes sobre DLLs.
Vincular um executável a uma DLL
Descreve a vinculação explícita e implícita a uma DLL.
Inicializar uma DLL
Discute o código de inicialização da DLL que deve ser executado quando a DLL é carregada.
DLLs e o comportamento da biblioteca de tempo de execução do Visual C++
Descreve a sequência de inicialização da biblioteca de tempo de execução DLL.
LoadLibrary e AfxLoadLibrary
Discute o uso de LoadLibrary
e AfxLoadLibrary
para vincular explicitamente a uma DLL em tempo de execução.
GetProcAddress
Discute o uso GetProcAddress
para obter o endereço de uma função exportada na DLL.
FreeLibrary e AfxFreeLibrary
Discute o uso FreeLibrary
e AfxFreeLibrary
quando o módulo DLL não é mais necessário.
Dynamic-Link Ordem de pesquisa da biblioteca
Descreve o caminho de pesquisa que o sistema operacional Windows usa para localizar uma DLL no sistema.
Estados do módulo de uma DLL MFC regular dinamicamente ligada ao MFC
Descreve os estados do módulo de uma DLL MFC regular dinamicamente vinculada ao MFC.
DLLs de extensão MFC
Explica DLLs que normalmente implementam classes reutilizáveis derivadas das classes MFC existentes.
Criando uma DLL somente de recursos
Discute uma DLL somente de recursos, que contém apenas recursos, como ícones, bitmaps, cadeias de caracteres e caixas de diálogo.
Recursos localizados em aplicativos MFC: DLLs satélite
Fornece suporte aprimorado para DLLs satélites, uma funcionalidade que ajuda na criação de aplicações adaptadas para diferentes idiomas.
Importação e exportação
Descreve a importação de símbolos públicos para um aplicativo ou a exportação de funções de uma DLL
Tecnologia ativa e DLLs
Permite que servidores de objeto sejam implementados dentro de uma DLL.
Automação em uma DLL
Descreve o que a opção de automação no MFC DLL Wizard fornece.
Convenções de nomenclatura para DLLs MFC
Discute como as DLLs e bibliotecas incluídas no MFC seguem uma convenção de nomenclatura estruturada.
Chamando funções DLL de aplicativos Visual Basic
Descreve como chamar funções DLL de aplicativos Visual Basic.
Seções relacionadas
Usando MFC como parte de uma DLL
Descreve DLLs MFC regulares, que permitem usar a biblioteca MFC como parte de uma biblioteca de vínculo dinâmico do Windows.
Versão DLL do MFC
Descreve como você pode usar as bibliotecas de vínculo dinâmico compartilhadas MFCxx.dll e MFCxxD.dll (onde x é o número da versão MFC) com aplicativos MFC e DLLs de extensão MFC.