Você está na página 1de 4

24/11/2023, 17:10 Criar DLLs C /C++ no Visual Studio

Criar DLLs C /C++ no Visual Studio


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
os 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 no runtime
(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 vinculação dinâmica e vinculação estática


A vinculação estática copia todo o código de objeto em uma biblioteca estática para os executáveis
que a utilizam quando são compilados. A vinculação dinâmica inclui apenas as informações
necessárias ao Windows em tempo de execução para localizar e carregar a DLL que contém um
item de dados ou função. Ao criar 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 estiver presente, uma função especial na DLL, DllMain, é chamada
para fazer qualquer inicialização que a DLL requeira.

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, há
duas diferenças fundamentais entre aplicativos e DLLs:

Um aplicativo pode ter várias instâncias de si mesmo em execução simultaneamente no


sistema. Uma DLL pode ter apenas uma instância.

Um aplicativo pode ser carregado como um processo. Ele pode ter coisas como uma
pilha, threads de execução, memória global, manipuladores de arquivos e uma fila de
mensagens. Uma DLL não pode ter essas coisas.

Vantagens de usar DLLs


A vinculação dinâmica ao código e aos recursos oferece várias vantagens sobre a vinculação
estática:

A vinculação dinâmica salva a memória e reduz a permutação. Muitos processos podem


usar uma DLL simultaneamente, compartilhando uma única cópia das partes somente
leitura de uma DLL na memória. Por outro lado, cada aplicativo criado por meio de uma
biblioteca vinculada estaticamente tem uma cópia completa do código da biblioteca que
o Windows deve carregar na memória.

read://https_learn.microsoft.com/?url=https%3A%2F%2Flearn.microsoft.com%2Fpt-br%2Fcpp%2Fbuild%2Fdlls-in-visual-cpp%3Fview%3Dmsvc… 1/4
24/11/2023, 17:10 Criar DLLs C /C++ no Visual Studio

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. Por outro lado, cada
aplicativo criado por meio de uma biblioteca vinculada estaticamente tem o código da
biblioteca vinculado à sua imagem executável. Isso usa mais espaço em disco e requer
mais largura de banda para transferência.

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 atualizações na DLL. Quando as DLLs são atualizadas, os aplicativos que as
usam não precisam ser recompilados ou revinculados. Eles podem usar a nova DLL
assim que ela for implantada. Por outro lado, quando você faz correções no código de
objeto vinculado estaticamente, deve revincular e reimplantar todos os aplicativos que o
utilizam.

Você pode usar DLLs para fornecer suporte pós-venda. Por exemplo, uma DLL de
driver de vídeo pode ser modificada para dar suporte a uma exibição que não estava
disponível quando o aplicativo foi enviado.

Você pode usar a vinculação explícita para descobrir e carregar DLLs no runtime. Por
exemplo, extensões de aplicativo que adicionam novas funcionalidades ao seu aplicativo
sem recompilá-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 seus argumentos sejam enviados por
push para a pilha. Se a função ou o aplicativo é responsável por limpar a pilha. E se
algum argumento é passado em registros.

A vinculação dinâmica fornece um mecanismo para estender as classes da biblioteca


MFC (Microsoft Foundation Class). 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 à localidade, o que
facilita muito a criação de versões internacionais de um aplicativo. Em vez de enviar
muitas versões localizadas de 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 no runtime.

Uma desvantagem potencial para o uso de DLLs é que o aplicativo não é autônomo. Ele depende da
existência de um módulo DLL separado que você deve implantar ou considerar como parte de sua
instalação.

Mais informações sobre como criar e usar DLLs


Os artigos a seguir 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 com o Visual Studio.

Tipos de DLLs
Fornece informações sobre os diferentes tipos de DLLs que podem ser compilados.

read://https_learn.microsoft.com/?url=https%3A%2F%2Flearn.microsoft.com%2Fpt-br%2Fcpp%2Fbuild%2Fdlls-in-visual-cpp%3Fview%3Dmsvc… 2/4
24/11/2023, 17:10 Criar DLLs C /C++ no Visual Studio

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


Aborda o código de inicialização de DLL que deve ser executado quando sua DLL é carregada.

Comportamento de DLLs e da biblioteca em tempo de execução do Visual C++


Descreve a sequência de inicialização da DLL da biblioteca de runtime.

LoadLibrary e AfxLoadLibrary
Aborda o uso de LoadLibrary e AfxLoadLibrary para vincular explicitamente a uma DLL de
runtime.

GetProcAddress
Aborda o uso de GetProcAddress para obter o endereço de uma função exportada na DLL.

FreeLibrary e AfxFreeLibrary
Aborda o uso de FreeLibrary e AfxFreeLibrary quando o módulo DLL não é mais necessário.

Ordem de pesquisa da biblioteca de vínculo dinâmico


Descreve o caminho de pesquisa que o sistema operacional Windows usa para localizar uma DLL
no sistema.

Estados de módulo de uma DLL MFC regular dinamicamente ligada ao MFC


Descreve os estados do módulo de uma DLL do MFC regular vinculada dinamicamente ao MFC.

DLLs de extensão de MFC


Indica DLLs que normalmente implementam classes reutilizáveis derivadas das classes MFC
existentes.

Criando uma DLL somente de recursos


Descreve uma DLL somente de recurso, que contém apenas recursos, como ícones, bitmaps,
cadeias de caracteres e caixas de diálogo.

Recursos localizados em aplicativos MFC: DLLs satélites


Fornece suporte avançado para DLLs satélite, um recurso que ajuda na criação de aplicativos
localizados para vários 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 objetos sejam implementados dentro de uma DLL.

Automação em uma DLL


Descreve o que a opção de automação no assistente de DLL do MFC fornece.

Convenções de nomenclatura para DLLs do MFC


Discute como as DLLs e as 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 de DLL a partir de aplicativos do Visual Basic.

read://https_learn.microsoft.com/?url=https%3A%2F%2Flearn.microsoft.com%2Fpt-br%2Fcpp%2Fbuild%2Fdlls-in-visual-cpp%3Fview%3Dmsvc… 3/4
24/11/2023, 17:10 Criar DLLs C /C++ no Visual Studio

Seções relacionadas
Usar MFC como parte de uma DLL
Descreve DLLs do MFC regulares, que permitem que você use 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 do MFC) com aplicativos MFC e DLLs de extensão
MFC.

read://https_learn.microsoft.com/?url=https%3A%2F%2Flearn.microsoft.com%2Fpt-br%2Fcpp%2Fbuild%2Fdlls-in-visual-cpp%3Fview%3Dmsvc… 4/4

Você também pode gostar