O que são exatamente arquivos DLL, e como eles funcionam?

Como funcionam exactamente os ficheiros DLL? Parece haver muitos deles, mas não sei o que são ou como funcionam.

Então, o que se passa com eles?

Author: Alan006, 2008-09-23

9 answers

O que é um DLL?

As bibliotecas de ligações dinâmicas (DLL)s são como EXEs, mas não são directamente executáveis. Eles são semelhantes aos arquivos. so em Linux / Unix. Ou seja, DLLs são a implementação do MS de bibliotecas compartilhadas.

Os DLLs são tão parecidos com um EXE que o formato de ficheiro em si é o mesmo. Ambos EXE e DLLs são baseados no formato de arquivo executável portátil (PE). DLLs também podem conter componentes COM e bibliotecas. net.

O que faz um DLL conter?

Um DLL contém funções, classes, variáveis, UIs e recursos (como ícones, imagens, ficheiros, etc ...) que um EXE, ou outro DLL usa.

Tipos de bibliotecas:

Em praticamente todos os sistemas operacionais, existem dois tipos de bibliotecas. Bibliotecas estáticas e bibliotecas dinâmicas. No windows as extensões de arquivos são as seguintes: bibliotecas estáticas (.lib) e bibliotecas dinâmicas (.dll). A principal diferença é que as bibliotecas estáticas estão ligadas ao executável em tempo de compilação; enquanto as bibliotecas dinâmicas ligadas não estão ligadas até o tempo de execução.

Mais sobre bibliotecas estáticas e dinâmicas:

Você normalmente não vê bibliotecas estáticas no seu computador, porque uma biblioteca estática está embutida diretamente dentro de um módulo (EXE ou DLL). Uma biblioteca dinâmica é um arquivo independente.

Um DLL pode ser alterado a qualquer momento e só é carregado no tempo de execução quando um EXE carrega explicitamente o DLL. Uma biblioteca estática não pode ser alterada uma vez que é compilado no EXE. Um DLL pode ser atualizado individualmente sem atualizar o próprio EXE.

A carregar um DLL:

Um programa carrega um DLL no arranque, através do LoadLibrary Win32 API, ou quando é uma dependência de outro DLL. Um programa usa o GetProcAddress para carregar uma função ou LoadResource para carregar um recurso.

Outras leituras:

Verifique por favor MSDN ou Wikipedia para mais leitura. Também as fontes deste resposta.

 313
Author: Brian R. Bondy, 2008-09-24 00:51:26

O que é um DLL?

Os ficheiros DLL são ficheiros binários que podem conter código executável e recursos como imagens, etc. Ao contrário das aplicações, estas não podem ser executadas diretamente, mas uma aplicação irá carregá-las como e quando elas são necessárias (ou todas de uma vez durante o arranque).

São importantes?

A maioria das aplicações irá carregar os ficheiros DLL de que necessitam no arranque. Se algum destes não for encontrado o sistema não será capaz de iniciar o processo em todo.

Os ficheiros DLL poderão necessitar de outros ficheiros DLL

Da mesma forma que uma aplicação requer um ficheiro DLL, um ficheiro DLL pode estar dependente de outros ficheiros DLL. Se um desses arquivos DLL na cadeia de dependência não for encontrado, a aplicação não irá carregar. Isto é depurado facilmente usando qualquer ferramenta de Andador de dependências, como O Andarilho de dependências .

Há tantos deles nas pastas do sistema

A maior parte da funcionalidade do sistema é exposto a um programa de usuário na forma de arquivos DLL como eles são um formulário padrão de compartilhamento de código / recursos. Cada funcionalidade é mantida separadamente em diferentes arquivos DLL de modo que apenas os arquivos DLL necessários serão carregados e, assim, reduzir as restrições de memória no sistema.

As aplicações instaladas também usam ficheiros DLL

Os ficheiros DLL também se tornam uma forma de separar as funcionalidades fisicamente como explicado acima. Boas aplicações também tentar não carregar os arquivos DLL até que sejam absolutamente necessários, o que reduz os requisitos de memória. Isso também faz com que as aplicações para enviar com um monte de arquivos DLL.

Inferno

No Entanto, por vezes as atualizações do sistema interrompem outros programas quando há um desfasamento de Versão entre os arquivos DLL compartilhados e o programa que os requer. Pontos de verificação do sistema e cache DLL, etc. foram as iniciativas de M$ para resolver este problema. A plataforma. NET pode não enfrentar este problema em todo.

Como sabemos o que está dentro de um ficheiro DLL?

Terá de usar uma ferramenta externa como DUMPBIN ou Dependency Walker, que não só irá mostrar quais as funções visíveis publicamente (conhecidas como exportações) que estão dentro dos ficheiros DLL, como também quais os outros ficheiros DLL que ele necessita e quais as exportações desses ficheiros DLL que este ficheiro DLL está dependente.

Como os criamos / usamos?

Consulte a documentação de programação do seu fornecedor. Para C++, consulte LoadLibrary em MSDN.

 40
Author: computinglife, 2016-09-09 09:14:29
Digamos que está a fazer um executável que usa algumas funções encontradas numa biblioteca.

Se a biblioteca que está a usar for estática , o linker irá copiar o código do objecto para estas funções directamente da biblioteca e inseri-las no executável.

Agora, se este executável é executado, tem tudo o que precisa, por isso o carregador executável carrega-o na memória e executa-o.

Se a biblioteca for dinâmica , o linker não irá inserir código de objectos mas em vez disso, irá inserir um stub que basicamente diz que esta função está localizada neste DLL neste local.

Agora, se este executável for executado, faltam alguns bits do executável (isto é, os 'stubs') para que o carregador passe pelo executável a reparar os 'stubs' em falta. Só depois de todos os pubs terem sido resolvidos é que o executável poderá ser executado.

Para ver isto em acção, remova ou renomeie o DLL e veja como o carregador irá relatar um erro DLL em falta quando tentar execute o executável.

Daí o nome Dynamic Link Library , partes do processo de ligação estão a ser feitas dinamicamente no tempo de execução pelo carregador executável.

Uma nota final, se não se ligar ao DLL, então não serão inseridos nenhuns 'stubs' pelo linker, mas o Windows ainda oferece a API GetProcAddress que lhe permite carregar um ponto de entrada da função DLL, muito depois de o executável ter começado.

 16
Author: jussij, 2008-09-23 23:49:43

DLLs (dynamic link libraries) e SLs (shared libraries, equivalent under UNIX) são apenas bibliotecas de código executável que podem ser dinamicamente ligadas a um executável em tempo de carga.

As bibliotecas estáticas são inseridas num executável no momento da compilação e são fixadas a partir desse ponto. Eles aumentam o tamanho do executável e não podem ser compartilhados.

As bibliotecas dinâmicas têm as seguintes vantagens:

1 / Eles são carregados em tempo de execução em vez de tempo de compilação assim eles podem ser atualizados independentemente do executável (todas as janelas e janelas que você vê nas janelas vêm de DLLs para que a aparência da sua aplicação possa mudar sem que você tenha que reescrevê-la).

2 / porque eles são independentes, o código pode ser compartilhado por vários executáveis-isso salva a memória, uma vez que, se você estiver executando 100 aplicativos com um único DLL, pode haver apenas uma cópia do DLL na memória.

A sua principal desvantagem é a vantagem # 1-Ter DLLs mude independentemente a sua aplicação pode fazer com que a sua aplicação pare de funcionar ou comece a comportar-se de uma forma bizarra. DLL versioning tendem a não ser gerenciados muito bem sob as janelas e isso leva ao chamado "Inferno DLL".

 13
Author: paxdiablo, 2008-09-23 23:42:57

Os ficheiros DLL contêm uma tabela de exportaçãoque é uma lista de símbolos que podem ser pesquisados pelo Programa de chamadas. Os símbolos são tipicamente funções com a convenção de Invocação C (__stcall ). A tabela de exportação também contém o endereço da função.

Com esta informação, o programa de chamada pode então chamar as funções dentro do DLL mesmo que não tenha tido acesso ao DLL no momento da compilação.

Introdução Da Ligação Dinâmica Bibliotecas tem mais informações.

 13
Author: Adam Pierce, 2011-11-26 11:25:14

Http://support.microsoft.com/kb/815065

Uma DLL é uma biblioteca que contém código e dados que podem ser utilizados por mais de um programa ao mesmo tempo. Para exemplo, em sistemas operacionais Windows, o DLL do Comdlg32 apresenta caixa de diálogo funções relacionadas. Portanto, cada programa pode usar o funcionalidade que está contida em este DLL para implementar uma janela aberta caixa. Isso ajuda a promover a reutilização de código e uso eficiente de memória.

Usando um DLL, UM programa pode ser modularizado em componentes separados. Por exemplo, um programa de contabilidade pode ser vendido por módulo. Cada módulo pode ser carregado no programa principal em execução tempo se o módulo estiver instalado. Como os módulos são separados, o tempo de carga do programa é mais rápido, e um módulo só é carregado quando a funcionalidade é solicitada.

Além disso, as actualizações são mais fáceis de aplicar a cada módulo sem afectar outras partes programa. Para por exemplo, você pode ter uma folha de pagamento programa, e as taxas de imposto mudam cada ano. Quando estas alterações são isoladas para um DLL, você pode aplicar uma atualização sem necessidade de construir ou instalar o programa todo outra vez.

Http://en.wikipedia.org/wiki/Dynamic-link_library

 7
Author: Jorge Ferreira, 2008-09-23 23:36:41

DLL é uma extensão de arquivo e conhecido como formato de arquivo" dynamic link library " usado para manter vários códigos e procedimentos para programas Windows. O Software & Games roda nas bases dos ficheiros DLL; os ficheiros DLL foram criados para que várias aplicações pudessem usar as suas informações ao mesmo tempo.

Se quiser obter mais informações sobre os ficheiros DLL ou enfrentar qualquer erro, leia o seguinte post. https://www.bouncegeek.com/fix-dll-errors-windows-586985/

 4
Author: Akshya Nagar, 2017-07-21 12:01:59

As DLLs (bibliotecas de ligações dinâmicas) contêm recursos utilizados por uma ou mais aplicações ou serviços. Eles podem conter classes, ícones, strings, objetos, interfaces, e praticamente qualquer coisa que um desenvolvedor precisaria armazenar, exceto um UI.

 2
Author: tsilb, 2008-09-23 23:36:34

De acordo com a Microsoft

(DLL) bibliotecas de ligações dinâmicas são ficheiros que contêm dados, códigos ou recursos necessários para a execução de aplicações. Estes são arquivos que são criados pelo ecossistema windows e podem ser compartilhados entre duas ou mais aplicações.

Quando UM programa ou software é executado no Windows, muito de como a aplicação funciona depende dos arquivos DLL do programa. Por exemplo, se uma determinada aplicação tivesse vários módulos, então como cada módulo interage com o outro é determinado pelos arquivos DLL do Windows.

Se quiser uma explicação detalhada, verifique estes recursos úteis

O que são ficheiros dll , acerca dos ficheiros Dll

 2
Author: code builders, 2020-01-01 16:50:20