Pergunta

Como exatamente arquivos DLL trabalho? Parece haver uma enorme quantidade de-los, mas eu não sei o que são ou como eles funcionam.

Então, o que é o negócio com eles?

Foi útil?

Solução

O que é uma DLL?

Dynamic Link Libraries (DLL) s são como EXEs, mas eles não são directamente executável. Eles são semelhantes aos arquivos .so no Linux / Unix. Ou seja, DLLs são a implementação de bibliotecas compartilhadas do MS.

DLLs são tanto como um EXE que o formato de arquivo 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 .NET bibliotecas.

O que faz um DLL contém?

A DLL contém funções, classes, variáveis, interfaces de usuário e recursos (tais como ícones, imagens, arquivos, ...) que um EXE, ou outros usos DLL.

Tipos de bibliotecas:

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

Mais sobre estático e bibliotecas dinâmicas:

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

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

Carregando uma DLL:

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

Leitura complementar:

Verifique MSDN ou Wikipedia para outras leituras. Também as fontes desta resposta.

Outras dicas

O que é uma DLL?

arquivos DLL são arquivos binários que podem conter código e recursos como imagens, etc. Ao contrário das aplicações executável, estas não podem ser executados diretamente, mas uma aplicação irá carregá-los como e quando eles são necessários (ou tudo de uma vez durante a inicialização).

são importantes?

A maioria dos aplicativos irá carregar os arquivos DLL que necessitam na inicialização. Se algum destes não são encontrados, o sistema não será capaz de iniciar o processo em tudo.

arquivos DLL pode exigir outros arquivos DLL

Da mesma forma que um aplicativo requer um arquivo DLL, um arquivo DLL pode ser dependente de outros arquivos DLL em si. Se um desses arquivos DLL na cadeia de dependência não for encontrado, o aplicativo não irá carregar. Esta é depurado facilmente usar todas as ferramentas Walker dependência, como Dependency Walker .

Existem 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 uma forma padrão de partilha de códigos / recursos. Cada funcionalidade é mantida separadamente em diferentes arquivos DLL para que apenas os arquivos DLL necessários serão carregados e, assim, reduzir as restrições de memória no sistema.

Aplicativos instalados também usam arquivos DLL

DLL também arquivos torna-se uma forma de separar funcionalidades fisicamente como explicado acima. Boas aplicações também tentar para não carregar os arquivos DLL até que eles são absolutamente necessários, o que reduz os requisitos de memória. Isso também faz com que aplicativos para navio com um monte de arquivos DLL.

DLL Hell

No entanto, atualizações sistema vezes muitas vezes quebra outros programas quando há uma incompatibilidade de versão entre os arquivos DLL compartilhados e o programa que lhes exige. checkpoints do sistema e cache de DLL, etc. têm sido as iniciativas de M $ para resolver este problema. A plataforma .NET pode não enfrentar esse problema em tudo.

Como é que sabemos o que está dentro de um arquivo DLL?

Você tem que usar uma ferramenta externa como DUMPBIN ou Dependency Walker, que não só vai mostrar o que funções publicamente visíveis (conhecidas como exportações) estão contidos dentro dos arquivos DLL e também o que outros arquivos DLL que exige e que as exportações daqueles arquivos DLL esse arquivo DLL é dependente.

Como podemos criar / usá-los?

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

Vamos dizer que você está fazendo um executável que usa algumas funções encontradas em uma biblioteca.

Se a biblioteca que você está usando é estática , o vinculador irá copiar o código objeto para estas funções directamente a partir da biblioteca e inseri-los no executável.

Agora, se este executável é executado ele tem tudo que precisa, de modo que o carregador executável apenas carrega na memória e executa-lo.

Se a biblioteca é dinâmica o vinculador não irá inserir código de objeto, mas sim ele irá inserir um esboço que basicamente diz que esta função está localizado nesta DLL neste local.

Agora, se este executável é executado, pedaços do executável está faltando (isto é, os canhotos) para o carregador passa pela fixação executável-se os topos ausentes. Só depois de tudo os canhotos foram resolvidos será o executável ser autorizados a executar.

Para ver isso em ação excluir ou renomear o DLL e ver como o carregador irá relatar um erro de DLL faltando quando você tenta executar o arquivo executável.

Daí o nome Dynamic Link Library , partes do processo de vinculação está sendo feito de forma dinâmica em tempo de execução pelo carregador executável.

Uma nota final, se você não link para a DLL, em seguida, há topos será inserido pelo vinculador, mas o Windows ainda oferece a GetProcAddress API que lhe permite carregar uma executar a DLL ponto de entrada função muito tempo depois o executável foi iniciado.

DLLs (dynamic link libraries) e SLs (bibliotecas compartilhadas, o equivalente em UNIX) são bibliotecas apenas de código executável que pode ser ligado de forma dinâmica em um executável em tempo de carregamento.

bibliotecas estáticas são inseridos em um executável em tempo de compilação e são fixados a partir desse ponto. Eles aumentam o tamanho do executável e não pode ser compartilhado.

bibliotecas

dinâmicos têm as seguintes vantagens:

1 / Eles são carregados em tempo de execução em vez de tempo de compilação para que eles possam ser atualizados de forma independente do executável (todas aquelas janelas de fantasia e caixas de diálogo que você vê no Windows vêm de DLLs de modo que o look-and-feel de sua lata de aplicação mudança sem você ter que reescrevê-lo).

2 / porque eles são independentes, o código pode ser compartilhado entre vários executáveis ??- isso economiza memória, já que, se você está rodando 100 aplicativos com um único DLL, pode ser apenas uma cópia da DLL na memória <. / p>

Sua principal desvantagem é a vantagem # 1 - com DLLs mudar independente seu aplicativo pode causar o aplicativo para parar de trabalhar ou começar a se comportar de maneira bizarra. DLL de versões tendem a não ser gerido muito bem no Windows e isso leva à curiosamente-nomeado "DLL Hell".

arquivos DLL conter uma Export Table que é uma lista de símbolos que podem ser consultados pelo programa de chamada. Os símbolos são tipicamente funções com a convenção C chamando ( __ 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 da DLL mesmo que ele não tem acesso para a DLL em tempo de compilação.

Apresentando Dynamic Link bibliotecas tem mais algumas informações.

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

A DLL é uma biblioteca que contém código e dados que podem ser utilizadas por mais do que um programa ao mesmo tempo. Para exemplo, em sistemas operacionais Windows, o Comdlg32 DLL executa comum diálogo funções de caixa relacionados. Portanto, cada programa pode usar o funcionalidade que está contido em esta DLL para implementar uma caixa de diálogo Abrir caixa. Isso ajuda a promover a reutilização de código e uso eficiente da memória.

Ao usar uma 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 carregados para o programa principal em run tempo se que o módulo está instalado. Uma vez que os módulos são separados, o tempo de carregamento do programa é mais rápido, e um módulo só é carregado quando esse funcionalidade é solicitada.

Além disso, as atualizações são mais fáceis de aplicam-se a cada um dos módulos sem afectar outras partes do programa. Para exemplo, você pode ter uma folha de pagamento programa e as taxas de imposto alterar cada ano. Quando essas alterações são isolados a uma DLL, você pode aplicar uma atualização sem a necessidade de construir ou instalar todo o programa novamente.

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

DLL é uma Extensão & conhecido como formato de arquivo “biblioteca de vínculo dinâmico” utilizado para a realização de vários códigos e procedimentos para programas do Windows Arquivo. Software & Games é executado nas bases de arquivos DLL; arquivos DLL foi criado para que várias aplicações podem utilizar suas informações ao mesmo tempo.

Se você quiser obter mais informações sobre arquivos DLL ou enfrentar qualquer erro ler o seguinte post. https://www.bouncegeek.com/fix-dll-errors-windows -586.985 /

DLLs (Dynamic Link Libraries) contêm recursos usados ??por um ou mais aplicativos ou serviços. Eles podem conter classes, ícones, cordas, objetos, interfaces e praticamente qualquer coisa que um desenvolvedor precisa para armazenar, exceto uma interface de usuário.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top