Página Inicial



twitter

Facebook

Orkut

  Dicas
|

RESOLVENDO PROBLEMAS COM DLLS DO WINDOWS

Endócrines - 17/03/2004

Quantos de nós já não vimos uma mensagem assim "Este programa executou uma operação ilegal e será fechado" ou então "Este programa causou um erro na NomeEstranho.DLL e será fechado". Praticamento todo o usuários do Windows, principalmente da galera do 9x (95, 98 e 98 SE) em diante, já experimentou algum problema deste tipo.

Não é sempre que ele ocorre, mas estimo eu que 95% dos casos você pode estar vivendo um problema que ficou mais conhecido como "DLL Hell ou "Inferno das DLLs". Esse problema ocorre principalmente quando programas diferentes utilizam versões ímpares de uma mesma DLL (Dynamic Link Library ou Link de Biblioteca Dinâmica), ou quando uma DLL do sistema operacional é sobre escrita por outra de mesmo nome pertencente a algum programa que você instalou.

Nesta minha dica, vou mostrar e entender o que são e como funcionam esses arquivos. Vamos investigar, o porquê de tantos problemas e, finalmente, analisar algumas possíveis soluções implementadas pelo próprio Windows, como uma forma de minimizar as conseqüências deste tipo de inconvenientes.

O Surgimento dos Arquivos .DLL

Nos primórdios da era da informática um programa era constituído apenas por um arquivo executável que continha todas as instruções necessárias para o seu funcionamento. Entretanto, alguns programas complexos poderiam conter diversos executáveis. Com o passar do anos, o tamanho dos programas cresceu consideravelmente principalmente com a adoção generalizada das interfaces gráficas (GUI -Graphical User Interface ou Interface Gráfica de Usuário), o que fez com que apenas a divisão dos programas em vários arquivos executáveis se tornasse ineficiente sob o ponto de vista produtivo, uma vez que o código deles não podia ser compartilhado.

Para resolver este problema os projetistas do Windows começaram a tirar vantagem de uma estratégia de geração de códigos chamada "Linkagem" dinâmica. Como sabemos grande parte das funções utilizadas em um programas não é codificada em seu corpo, a maioria delas tem seu código armazenado em bibliotecas. Bom, em uma "linkagem" convencional o que ocorre basicamente é que o programador informa ao compilador a localização das bibliotecas, este importa os códigos das funções e o concatena com o código do programa gerando assim, um arquivo executável contendo o código escrito pelo programador e o código oriundo das bibliotecas.

Em uma "linkagem" dinâmica, o código das funções não é armazenado no arquivo executável, mas consultado durante a execução do programa, em uma biblioteca pré-compilada. Existem diversas vantagens nesse tipo de estratégia, dentre elas posso citar:

  • Possibilidade de criação de arquivos executáveis menores;
  • Bibliotecas dinâmicas permitem que o código seja compartilhado por vários arquivos executáveis, evitando assim que um mesmo trecho de código se repita em diferentes programas;
  • Atualizações nos programas são mais fáceis, uma vez que é possível alterar apenas bibliotecas dinâmicas ao invés de reinstalar todo o programa.

As DLLs são as bibliotecas dinâmicas padrão de todos os sistemas da família Windows. Sendo que que a famosa API (Application Program Interface ou Aplicação de Programa de Interface) do Windows, é, em sua grande maioria, baseada neste tipo de arquivo. É na API que estão predefinidas as informações de como devem ser desenhadas, por exemplo, barras de rolagem, botões e caixas de diálogos, fazendo com que os programadores tenham menos trabalho para desenvolverem aplicações e promovendo a padronização das interfaces dos programas. Um bom exemplo é a comdlg32.dll (Commom Dialog Library ou Biblioteca de Diálogo Comum), que contém alguns diálogos padrão, como o de seção de cores e abertura de arquivos.

Da mesma forma que um programa como o MS_Office possui diversas versões (97,2000 e XP), as DLLs que acompanham o Windows também podem ter. Sendo assim, podem existir, por exemplo sistemas WinMe que são acompanhados de versões distintas da mesma DLL.

O problema é que um programa compilado e testado deixa de funcionar corretamente com uma versão mais nova ou mais antiga da biblioteca. Isso está relacionado ao fato de que uma versão mais antiga pode não possuir todas as funcionalidades exigidas pelo software e uma versão mais nova pode não ser totalmente compatível com as versões anteriores. Além disso, um programa construído para funcionar com uma DLL em determinado idioma (Português, Inglês e etc...) pode não funcionar com uma DLL de idioma diferente.

Para visualizarmos informações de versão com o Windows Explorer basta clicarmos com o botão direito sobre o arquivo, selecionar a opção Propriedades e, em seguida, clicar sobre a aba Versão.

Bom, mas como resolver este tipo de problema?

O fato é que não existe nenhuma receita mágica para isso, contudo, a partir do Windows 98, a Microsoft começou a se preocupar com este tipo de problema, tanto que este vem acompanhado de um programa gerenciador de conflitos de versão (vcmui.exe) - Version Conflict Manager ou Corretor de Conflitos de Versão. Este programinha fica armazenado na pasta c:\windows e mantém uma cópia dos arquivos de sistema (DLL, OCX, SYS,...) que foram substituídos durante as atualizações do Windows. As cópias de segurança ficam armazenadas na pasta c:\windows\vmc e no caso de algum conflito que foram substituídos podem ser restaurados com a ajuda da ferramenta.

Outra ferramenta presente no Windows 98/2000/XP é o sfc.exe (System File Checker ou Sistema de Checagem de Arquivos), que tem como objetivo proteger arquivos vitais do sistema contra substituições ou exclusões. Ao contrário do vcmui.exe o SFC procura restaurar os arquivos danificados ou substituídos, a partir da mídia original.

Para executarmos o SFC, no Windows 2000, basta digitarmos c:\>sfc /scannow na linha de comando, pressionar Enter e, então, a aplicação solicitará o CD de instalação do sistema para que os arquivos possam ser restaurados. Também é possível realizar checagens automáticas, através de algumas opções do programa. Tais opções podem ser visualizadas digitando-se SFC, seguido da tecla Enter.

O Windows ME também possui um mecanismo para a verificação de integridade dos arquivos de sistema. Esta ferramenta pode ser acionada através de um utilitário também presente no Windows 98, chamado msinfo32.exe. Para executá-lo, selecione a opção Executar do Menu Iniciar, logo em seguida digite msinfo32.exe e pressione o botão OK. Após a abertura do programa, vá até o menu Ferramentas de verificação de assinatura e uma tela será exibida. Com o verificador de assinatura, é possível descobrir quais os arquivos do sistema foram substituídos, o que pode ser muito útil durante a solução de conflitos de versão.

Como uma medida mais automatizada, o Windows ME oferece também a possibilidade de restaurar o sistema a um estado anterior (sem problemas), através de um utilitário que pode ser encontrado no Menu Iniciar, em: Programas ->Acessórios -> Feramentas -> Restauração do Sistema. Este aplicativo possui pontos de verificação gerados automaticamente quando certos programas são instalados, tornando possível reverter as ações feitas pelos programas de instalação.
Também é possível criar um ponto de checagem manualmente a qualquer hora, permitindo que o usuário crie um deles, por exemplo, antes de instalar algum programa e, caso haja algum problema, tente reverter a situação através do restaurador. Além das ferramentas nativas do próprio Windows, é possível encontrar programas produzidos por outros fabricantes que se propõem a, se não solucionar, pelo menos diminuir as dores de cabeça provocadas por estes tipos de problemas, tal como o Version Stamper (http://www.desaware.com/VersionStamperL2.html). Entretanto, podem existir casos principalmente na família do Windows 9x, onde infelizmente a reinstalação do Sistema Operacional pode ser a única solução.

Espero ter contribuído para o esclarecimento da função desempenhada pelos arquivos .DLL do Windows, bem como ter apresentado procedimentos para se tratar eventuais problemas relacionados a eles.

Se você está interessando em mais informações sobre o assunto, ou deseja conversar sobre ele, basta dar um pulo no Fórum do BoaDica (http://www.forumboadica.com.br).

 
Indique esta dica Indique esta dica para um amigo

VOLTAR