Uma biblioteca instalada que o programa não encontra, um driver de banco que aparece em uma tela e some em outra e uma configuração gravada em um lugar e procurada em outro costumam ter a mesma origem: a diferença entre programas de 32 e de 64 bits.
O que significa a arquitetura
A arquitetura indica o tamanho dos endereços que o processador e os programas usam para acessar a memória. Um programa de 32 bits fica limitado a poucos gigabytes de memória, e um programa de 64 bits vai muito além desse limite. Os processadores atuais e o Windows atual são de 64 bits, e o Windows 11 só existe nessa arquitetura.
O Windows de 64 bits executa programas de 32 bits e de 64 bits. O Windows de 32 bits só executa programas de 32 bits. A arquitetura do sistema aparece no comando systeminfo, na linha Tipo de sistema, e nas configurações do Windows, na página Sobre.
Uma regra que explica muitas falhas
Um processo carrega apenas bibliotecas da mesma arquitetura. Um programa de 32 bits usa DLLs de 32 bits, e um programa de 64 bits usa DLLs de 64 bits, mesmo que o Windows seja de 64 bits. Por isso, a pergunta que importa nesses casos é a arquitetura do programa, e não a do Windows.
O Gerenciador de Tarefas mostra essa informação. Na aba Detalhes, a coluna Plataforma indica 32 bits ou 64 bits para cada processo, e essa coluna é acrescentada pelo clique com o botão direito no título das colunas.
As pastas e o registro separados
No Windows de 64 bits, os programas e as bibliotecas de cada arquitetura ficam em lugares diferentes:
C:\Program Files: os programas de 64 bits;C:\Program Files (x86): os programas de 32 bits;C:\Windows\System32: as bibliotecas e os programas do sistema de 64 bits, apesar do número 32 no nome;C:\Windows\SysWOW64: as bibliotecas e os programas do sistema de 32 bits.
Um programa de 32 bits que procura a pasta System32 é desviado, sem perceber, para a SysWOW64. O registro do Windows tem uma separação parecida, e as configurações dos programas de 32 bits ficam em uma área chamada WOW6432Node, dentro da área de software do registro.
Componentes com duas versões
Vários componentes existem nas duas arquiteturas, e cada programa usa a versão da própria arquitetura:
- os pacotes de bibliotecas do Visual C++, instalados em versão x86, de 32 bits, e x64, de 64 bits;
- os drivers ODBC de acesso a banco de dados, com uma tela de Fontes de Dados ODBC para cada arquitetura;
- os componentes COM, registrados separadamente para cada arquitetura.
Um programa de 32 bits em um Windows de 64 bits precisa do componente de 32 bits. A instalação apenas da versão de 64 bits, que parece a correta para o sistema, deixa o programa com a mesma falha. Da mesma forma, uma fonte de dados ODBC de sistema criada na tela de 64 bits não aparece para um programa de 32 bits. As fontes de dados de usuário aparecem nas duas telas, mas só funcionam com um driver da mesma arquitetura do programa.
No Windows 10 e no Windows 11, a pesquisa do menu Iniciar encontra as duas telas, Fontes de Dados ODBC (32 bits) e Fontes de Dados ODBC (64 bits). Cada tela é aberta pelo programa odbcad32.exe da pasta do sistema correspondente:
C:\Windows\System32\odbcad32.exe: abre a tela de 64 bits;C:\Windows\SysWOW64\odbcad32.exe: abre a tela de 32 bits.
Sinais de mistura de arquiteturas
Algumas mensagens indicam essa mistura:
- O aplicativo não pôde ser iniciado corretamente (0xc000007b): o programa encontrou uma DLL da arquitetura errada no caminho.
- Não é um aplicativo Win32 válido: o Windows tentou carregar um arquivo de outra arquitetura ou um arquivo danificado.
- Nome da fonte de dados não encontrado e nenhum driver padrão especificado (IM002): a fonte de dados ODBC foi criada na tela da outra arquitetura, ou o driver está instalado só na outra arquitetura.
- Incompatibilidade de arquitetura entre o driver e o aplicativo (IM014): a fonte de dados existe, mas aponta para um driver de outra arquitetura.
No suporte
Diante de uma DLL, de um driver ou de um componente que o programa não encontra, convém conferir primeiro a arquitetura do programa, na coluna Plataforma do Gerenciador de Tarefas. O componente instalado precisa ter a mesma arquitetura do programa, e não necessariamente a do Windows.
Para guardar
- O Windows de 64 bits executa programas de 32 e de 64 bits, e cada processo usa só bibliotecas da própria arquitetura.
- Os programas de 32 bits ficam em Program Files (x86), e os de 64 bits, em Program Files.
- A pasta System32 guarda os arquivos de 64 bits, e a SysWOW64, os de 32 bits.
- Visual C++, ODBC e componentes COM têm versões separadas para cada arquitetura.
O driver ODBC do banco foi instalado e configurado, mas o programa informa que a fonte de dados não foi encontrada. O que conferir?
A arquitetura do programa e a tela em que a fonte de dados foi criada. Um programa de 32 bits só enxerga os drivers e as fontes de dados de sistema de 32 bits, configurados na tela de 32 bits.
O Windows é de 64 bits, e o pacote do Visual C++ de 64 bits está instalado. Por que um programa ainda informa a falta de uma DLL desse pacote?
Porque o programa pode ser de 32 bits, e um processo de 32 bits só carrega bibliotecas de 32 bits. O pacote x86 do Visual C++ resolve o caso, mesmo em um Windows de 64 bits.