O sistema da loja pode chamar um componente instalado na própria máquina para usar o TEF, um certificado ou um equipamento. A falha pode acontecer ao carregar esse componente ou depois, durante uma operação que ele executa.
A API local
Quatro termos aparecem nesse tipo de integração:
- Biblioteca: um conjunto de funções que outros programas usam.
- DLL: a forma mais comum de biblioteca no Windows, um arquivo com a extensão
.dll. - SDK: um pacote de desenvolvimento do fornecedor, que pode incluir bibliotecas, documentação e exemplos.
- COM: um modelo de componentes do Windows, em que o programa cria um objeto pelo nome registrado. O OCX é um controle ActiveX, um componente COM usado em telas.
As funções de uma biblioteca formam uma API local. Algumas bibliotecas conversam com serviços do fornecedor pela rede e escondem essa comunicação, e outras usam um equipamento ou recursos do próprio computador. Nem toda DLL tem uma comunicação de rede por trás.
O log do sistema pode mostrar só a função chamada e o código de retorno, e o log da própria biblioteca mostra as etapas internas. O significado de cada código vem da documentação da versão instalada.
Os componentes do caixa
No caixa 01, as bibliotecas mais comuns são o cliente do TEF, as bibliotecas da impressora e do leitor de código de barras e os SDKs de fornecedores de serviços. Um componente de assinatura ou de acesso a certificados também pode ser exigido por uma versão do sistema. A lista de componentes de cada caixa depende da versão do sistema e das integrações em uso, e não de uma regra válida para todo caixa.
Falhas de carregamento
Antes de qualquer operação, o programa precisa encontrar e carregar a biblioteca. As mensagens do Windows nessa etapa indicam a causa provável:
- O módulo especificado não foi encontrado: a DLL ou uma das dependências dela não está no caminho procurado, no erro 126.
- Não é um aplicativo Win32 válido: a arquitetura da DLL não combina com a do programa, como uma DLL de 64 bits em um programa de 32 bits, no erro 193.
- Classe não registrada: o componente COM não está registrado na arquitetura usada pelo programa, no código 80040154.
Um programa de 32 bits só carrega bibliotecas de 32 bits, e um programa de 64 bits só carrega bibliotecas de 64 bits. No Windows de 64 bits, o registro dos componentes COM também é separado por arquitetura, com duas versões do registrador:
C:\Windows\System32\regsvr32.exe: registra os componentes de 64 bits;C:\Windows\SysWOW64\regsvr32.exe: registra os componentes de 32 bits.
O registro de um componente segue o procedimento do fabricante e exige permissão de administrador. Nem toda DLL é um componente COM, e uma DLL comum não precisa de registro.
Falhas de execução
Depois do carregamento, uma operação ainda pode falhar por rede, por certificado ou pela resposta do fornecedor. A criação do objeto, que é uma etapa local, e o fluxo remoto que a biblioteca executa depois são etapas diferentes, com evidências diferentes.
No suporte
Diante de uma falha em biblioteca local, convém identificar o componente, a versão, a arquitetura, as dependências e o log próprio da biblioteca. A mensagem de classe não registrada orienta primeiro o carregamento do componente COM, e os outros erros exigem localizar a função e a etapa informadas pela biblioteca.
Para guardar
- Uma biblioteca oferece uma API local e pode usar a rede, um equipamento ou recursos do computador.
- DLL, SDK e COM são conceitos diferentes.
- O programa e a biblioteca precisam ter a mesma arquitetura, de 32 ou de 64 bits.
- No Windows de 64 bits, cada arquitetura tem o próprio registrador de componentes COM.
- O carregamento local e a operação remota são etapas diferentes.
O sistema mostra classe não registrada ao chamar um componente do TEF. Faz sentido começar pelos testes de Internet?
Não. A mensagem aponta a criação de um componente local, provavelmente COM. O registro, as dependências e a arquitetura exigida vêm primeiro, e um teste de Internet bem-sucedido não resolveria essa etapa.
Uma DLL nova foi copiada para o caixa, e o sistema passou a informar que ela não é um aplicativo Win32 válido. O que essa mensagem sugere?
Que a arquitetura da DLL não combina com a do programa, como uma DLL de 64 bits em um programa de 32 bits. A versão correta da DLL, conforme o fabricante, resolve a incompatibilidade.