O que é uma dll?

90

Esta pode ser uma pergunta muito noobie, mas no mundo atual de desenvolvimento de aplicativos da web, muitos programadores não precisam lidar muito com DLLs e, portanto, não se preocupam em aprender sobre seu propósito.

Então, o que é uma dll?

  1. Para que isso é usado?
  2. Como funciona?
  3. Como você cria um?
  4. Em que situações é apropriado criar um?

Disseram-me que as DLLs são usadas para armazenar bibliotecas de funções, mas, além disso, não sei muito. Espero que alguém aqui possa me esclarecer para que eu possa finalmente parar de me perguntar o que todos aqueles arquivos .dll em meu diretório do Windows estão fazendo.

Daniel
fonte
A wiki da comunidade deve ser usada para casos em que não há respostas reais para sua pergunta. Esta é uma pergunta válida e, ao selecionar o modo wiki da comunidade, você evita que você e os respondentes ganhem reputação nesta pergunta.
Cody Brocious
esta questão tem potencial para se tornar muito popular
Tamas Czinege
1
Você pensa? Talvez para visualizações, mas provavelmente não para votos ... De qualquer forma, já foi respondido 4 vezes.
Omar Kooheji
2
isso é trivialmente pesquisável ...
annakata
3
Sim, isso é pesquisável, mas eu realmente não encontrei muitas explicações concisas e boas sobre isso, especialmente para a questão de criar um e quando é apropriado usar um.
Daniel

Respostas:

55

Uma DLL é uma biblioteca de vínculo dinâmico. É uma coleção de códigos e / ou dados, que podem ser usados ​​por vários aplicativos (ou outras bibliotecas / módulos).

Assim, por exemplo, métodos comuns para processar arquivos, trabalhar com componentes GUI, etc. são disponibilizados em bibliotecas para que vários aplicativos possam usar a mesma funcionalidade. Isso não apenas reduz a necessidade de construir o mesmo material várias vezes, mas também garante que, por exemplo, as caixas de diálogo comuns sejam as mesmas entre os aplicativos.

As bibliotecas podem ser carregadas em tempo de execução e, portanto, compartilhadas entre diferentes aplicativos simultâneos. Isso é chamado de vinculação dinâmica.

Em alguns casos, a biblioteca pode ser incluída no próprio aplicativo. Isso é conhecido como vinculação estática. A vinculação estática torna a implantação mais fácil ao custo da flexibilidade, pois aplicativos diferentes carregam, cada um, a mesma cópia da DLL.

No entanto, a vinculação estática nem sempre é uma opção. Por exemplo, você não pode vincular estaticamente um aplicativo .NET. O usuário deve ter as bibliotecas .NET para executar um aplicativo .NET e as bibliotecas (ou assemblies como são chamados no .NET) são carregadas no tempo de execução.

DLLs são criadas pelas mesmas ferramentas usadas para criar aplicativos. Os detalhes específicos dependem muito das ferramentas utilizadas.

Brian Rasmussen
fonte
Obrigado pela resposta, uma coisa que me pergunto é como os aplicativos sabem quais funções estão disponíveis na dll? O dll em si é todo código de máquina, certo? Então, como as assinaturas de função pública na dll são expostas?
Daniel
Não sei sobre a maioria das linguagens, mas o preenchimento automático do Visual Studio mostrará todas as funções disponíveis.
Grant
1
Mas como o autocomplete descobre quais são as funções disponíveis se a dll é apenas um código de máquina?
Daniel
2
As máquinas podem ler o código da máquina. DLLs podem conter ícones, strings, fontes. Presumivelmente, há uma lista do que ele contém em algum lugar ali.
Grant
1
O Visual C ++ contém uma ferramenta chamada dumpbin - a execução de "dumpbin / exports Whatever.dll" dirá quais funções e coisas são exportadas (ou seja, estão disponíveis para uso por programas que carregam a DLL).
Graeme Perrow
29

DLL = Dynamic Link Library

O nome é bastante descritivo do que eles realizam.

Biblioteca

Permite isolar o código de um domínio de problema específico em um único local. Em seguida, compartilhe isso entre vários aplicativos. A biblioteca pode ser trocada por outra a qualquer momento para corrigir bugs ou adicionar funcionalidade.

Ligação

Você pode "Vincular" a biblioteca a um aplicativo para que a lógica na biblioteca não seja compilada diretamente no aplicativo.

Dinâmico

A biblioteca pode ser carregada sob demanda. Em vez de carregar um EXE único gigantesco na memória, o sistema operacional pode carregar apenas as partes necessárias. Além disso, se uma DLL for compartilhada entre aplicativos, o sistema operacional pode otimizar como a biblioteca é carregada e compartilhá-la entre os aplicativos.

Paul Alexander
fonte
10

DLL (biblioteca de vínculo dinâmico) arquivos podem ser descritos como pequenos "subprogramas", cujo objetivo é ajudar um programa maior a funcionar bem. Eles fornecem um meio de vincular vários recursos de hardware e software (em vários pontos em suas sessões de tempo de execução) ao programa executável principal no qual se baseiam, "conforme a necessidade surgir". Isso elimina a necessidade de carregar tudo o que está relacionado ao programa executável principal na RAM (memória de acesso aleatório) do computador quando o programa é executado pela primeira vez.

Os recursos de software transportados por DLLs incluem código para as várias funções do programa que não são realmente necessárias para manter o programa em execução: isto é, funções que só precisam ser chamadas em determinados momentos durante uma determinada sessão de computação e podem realmente nem precisar ser chamado. Carregar essas funções (e pode haver um número considerável delas para um determinado programa) na RAM do computador quando o programa é executado pela primeira vez e mantê-las lá durante a sessão seria um desperdício de espaço de RAM - que é considerado como um prêmio.

Um grande avanço:

O desenvolvimento de DLLs foi um grande avanço na computação, porque antes de estarem disponíveis, tudo relacionado a um programa (incluindo funções que raramente eram usadas) tinha que ser carregado na RAM quando o programa era carregado pela primeira vez. Isso levou a uma computação extremamente ineficiente, com velocidades mais lentas exibidas por vários programas. Também era extremamente difícil executar várias tarefas ao mesmo tempo, mesmo que alguns programas simples, por causa da sobrecarga da RAM.

Considerações:

DLLs geralmente são específicas da versão. Aqueles que funcionam bem para, digamos, a Versão 1 de um programa (ou uma linguagem de programação, como pode ser o caso) podem não funcionar bem com a Versão 2. A regra geral é que as DLLs na versão mais antiga tendem a não funcionar bem com a versão mais recente, mas os da versão mais recente geralmente podem funcionar muito bem com a versão mais antiga do programa ou linguagem de programação.

judy smith
fonte
7

Biblioteca vinculada dinamicamente.

Para dar um exemplo, se você tiver a DLL de outra pessoa carregada em seu aplicativo, poderá usar bits de programação dela.

Você pode carregar uma DLL que gera números aleatórios que sempre começam com "5" ou algo assim.

Em seu programa você pode chamar CrazyDLL.GenerateRandomNumbersSorta () e ele retornará o número.

Para um exemplo do mundo real, eu tenho o DLL que combina 4 caixas de texto (você as usaria para digitar endereços IP) e ele aceita automaticamente apenas números menores que 256 e controla o pressionamento da tecla backspace para pular para uma caixa de texto anterior.

Eu criei uma DLL com esse código e agora tudo o que tenho a fazer é arrastar e soltar mais daquelas coleções de caixa de texto de endereço IP sem ter que duplicar todo o código repetidamente.

A mesma DLL também tem função para converter endereços IP em strings hexadecimais e outros códigos úteis.

concessão
fonte
1

Da Biblioteca MSDN :

Uma biblioteca de vínculo dinâmico (DLL) é um módulo que contém funções e dados que podem ser usados ​​por outro módulo (aplicativo ou DLL).

Nemanja Trifunovic
fonte
1

DLL = Dynamic Load Link Library. Como lhe foi dito, é basicamente uma coleção de funções, classes C ++ e / ou variáveis ​​globais. Você pode carregar a DLL estaticamente (ou seja, o sistema operacional carrega automaticamente quando seu programa é iniciado) ou dinamicamente (seu programa carrega explicitamente), ponto em que as funções e coisas dentro da DLL estão disponíveis para seu programa.

Criar um é semelhante a criar um EXE, exceto que não precisa haver um main() função. Existem diretivas de vinculador para instruir o vinculador a criar uma DLL em vez de um EXE.

O principal motivo pelo qual você deseja fazer isso é encapsular algum código em um lugar e usá-lo a partir de vários exe, em vez de vincular o código a cada um.

Um motivo um tanto histórico é que seu exe pode ser menor, já que parte do código está fisicamente localizado em um arquivo diferente. Isso significa que a quantidade de espaço ocupado na memória pelo seu exe pode ser menor. Em sistemas modernos, isso é menos problemático do que costumava ser, embora ainda possa ser um problema no Windows Mobile.

Graeme Perrow
fonte