O problema do legado
No Brasil, milhares de empresas ainda utilizam sistemas de gestão escritos em Delphi, Visual Basic 6 ou até mesmo planilhas Excel com VBA para controlar a emissão de notas fiscais. Esses sistemas funcionam bem — foram escritos com cuidado, acumulam anos de regras de negócio — mas têm uma limitação crítica: fazer chamadas HTTP modernas com autenticação, certificado digital e parsing de JSON não é trivial nessas plataformas.
Para emitir NFS-e pela API REST da Emitare diretamente do Delphi antigo, você precisaria importar bibliotecas HTTP, lidar com SSL/TLS, serializar objetos para JSON e desserializar a resposta — um trabalho de vários dias, cheio de armadilhas.
A EmitareCOM.dll resolve isso completamente.
A solução: DLL/COM nativa para Windows
A EmitareCOM.dll é uma biblioteca COM (Component Object Model) registrada como objeto ActiveX que encapsula toda a complexidade de comunicação com a API da Emitare. Ela faz internamente:
- A conexão HTTPS com certificado SSL/TLS
- A autenticação via API Key
- A serialização e deserialização de JSON
- O tratamento de erros e retry automático
- O retorno do resultado em um formato simples (string JSON ou campos individuais)
Do ponto de vista do Delphi, VB6 ou VBA, é apenas um objeto COM — exatamente como os objetos ActiveX que essas linguagens usam há décadas. Sem dependências externas, sem instalar Node.js, sem .NET Framework adicional.
Compatibilidade: Windows 7 SP2, 8, 10 e 11, tanto 32 quanto 64 bits. Delphi 5 ou superior, VB6, VBA (Excel 2010+, Access 2010+), PowerBuilder e qualquer ambiente que suporte automação COM.
Instalação da DLL
Baixar a DLL
Acesse o dashboard da Emitare, vá em Downloads > EmitareCOM.dll e baixe a versão mais recente (sempre compatível com 32 e 64 bits via COM surrogate).
Copiar para o sistema
Copie o arquivo EmitareCOM.dll para C:\Windows\System32\ (64 bits) ou C:\Windows\SysWOW64\ (se o seu Delphi/VB6 for 32 bits).
Registrar a DLL
Abra o Prompt de Comando como Administrador e execute o comando de registro:
:: Registrar a DLL (necessário apenas uma vez por máquina) regsvr32 C:\Windows\System32\EmitareCOM.dll :: Sucesso: "DllRegisterServer bem-sucedido" :: Em caso de erro "Acesso negado": executar cmd como Administrador :: Para desinstalar: regsvr32 /u C:\Windows\System32\EmitareCOM.dll
Como usar em Delphi
Com a DLL registrada, criar uma instância no Delphi é trivial usando CreateOleObject. Não é necessário importar nada — a unit ComObj já está disponível em todas as versões do Delphi que suportam COM.
unit EmissaoNFSe; interface uses Vcl.Forms, Vcl.Dialogs, System.SysUtils, ComObj; procedure EmitirNFSe(ANumero, AValor, ACnpjTomador, ARazaoSocial: string); implementation procedure EmitirNFSe(ANumero, AValor, ACnpjTomador, ARazaoSocial: string); var Emitare : OleVariant; RpsJSON : string; ServicoJSON : string; TomadorJSON : string; Resultado : string; begin // Criar instância do objeto COM Emitare := CreateOleObject('EmitareCOM.Client'); // Configurar credenciais Emitare.ApiKey := 'SUA_API_KEY_AQUI'; Emitare.CompanyId := 'uuid-da-empresa'; Emitare.Sandbox := False; // True para homologação // Montar JSONs dos dados da nota RpsJSON := Format( '{"numero":"%s","serie":"A","tipo":1}', [ANumero] ); ServicoJSON := Format( '{"valorServicos":%s,"codigoServico":"01.05",' + '"discriminacao":"Servicos de consultoria","aliquota":5.0}', [StringReplace(AValor, ',', '.', [])] ); TomadorJSON := Format( '{"cpfCnpj":"%s","razaoSocial":"%s"}', [StringReplace(ACnpjTomador, '.', '', [rfReplaceAll]), ARazaoSocial] ); // Emitir NFS-e — retorna JSON com resultado Resultado := Emitare.EmitirNfse(RpsJSON, ServicoJSON, TomadorJSON); // Resultado: {"success":true,"nfseNumero":"12345", // "status":"issued","codigoVerificacao":"ABCD1234"} ShowMessage('NFS-e emitida: ' + Emitare.UltimoNfseNumero); end; end.
Propriedades disponíveis após EmitirNfse: UltimoNfseNumero, UltimoStatus, UltimoCodigoVerificacao, UltimoLinkNfse, UltimoErro. Essas propriedades facilitam o acesso sem precisar parsear o JSON de retorno.
Como usar em VB6
No Visual Basic 6, o processo é idêntico ao Delphi — apenas a sintaxe muda.
Option Explicit Public Sub EmitirNFSe(strNumero As String, dblValor As Double, _ strCNPJ As String, strRazao As String) Dim emitare As Object Dim strRPS As String Dim strServico As String Dim strTomador As String Dim strResult As String ' Criar objeto COM da Emitare Set emitare = CreateObject("EmitareCOM.Client") ' Configurar credenciais emitare.ApiKey = "SUA_API_KEY_AQUI" emitare.CompanyId = "uuid-da-empresa" emitare.Sandbox = False ' Montar JSON dos dados strRPS = "{""numero"":""" & strNumero & """,""serie"":""A"",""tipo"":1}" strServico = "{""valorServicos"":" & Format(dblValor, "0.00") & _ ",""codigoServico"":""01.05""," & _ """discriminacao"":""Consultoria"",""aliquota"":5.0}" strTomador = "{""cpfCnpj"":""" & strCNPJ & _ """,""razaoSocial"":""" & strRazao & """}" ' Emitir a nota fiscal strResult = emitare.EmitirNfse(strRPS, strServico, strTomador) If emitare.UltimoStatus = "issued" Then MsgBox "NFS-e emitida! Numero: " & emitare.UltimoNfseNumero Else MsgBox "Erro: " & emitare.UltimoErro, vbCritical End If Set emitare = Nothing End Sub
Como usar em Excel VBA
Para emitir NFS-e diretamente de uma planilha Excel — por exemplo, ao clicar em um botão na célula correspondente a um cliente — o processo é praticamente igual ao VB6.
Sub EmitirNFSe_Planilha() ' Lê os dados da linha ativa na planilha Dim ws As Worksheet Dim emitare As Object Dim lRow As Long Dim strRPS As String Dim strServico As String Dim strTomador As String Set ws = ThisWorkbook.Sheets("Notas") lRow = ActiveCell.Row ' Colunas esperadas na planilha: ' A=Numero, B=Valor, C=CNPJ Tomador, D=Razao Social strRPS = "{""numero"":""" & ws.Cells(lRow, 1).Value & _ """,""serie"":""A"",""tipo"":1}" strServico = "{""valorServicos"":" & _ Replace(ws.Cells(lRow, 2).Value, ",", ".") & _ ",""codigoServico"":""01.05""," & _ """discriminacao"":""Servicos prestados"",""aliquota"":5.0}" strTomador = "{""cpfCnpj"":""" & _ Replace(Replace(ws.Cells(lRow, 3).Value, ".", ""), "/", "") & _ """,""razaoSocial"":""" & ws.Cells(lRow, 4).Value & """}" Set emitare = CreateObject("EmitareCOM.Client") emitare.ApiKey = "SUA_API_KEY_AQUI" emitare.CompanyId = "uuid-da-empresa" emitare.EmitirNfse strRPS, strServico, strTomador If emitare.UltimoStatus = "issued" Then ws.Cells(lRow, 5).Value = emitare.UltimoNfseNumero ' Coluna E ws.Cells(lRow, 6).Value = "Emitida" ' Coluna F MsgBox "NFS-e " & emitare.UltimoNfseNumero & " emitida com sucesso!" Else ws.Cells(lRow, 6).Value = "Erro: " & emitare.UltimoErro MsgBox "Falha: " & emitare.UltimoErro, vbCritical End If Set emitare = Nothing End Sub
Importante no VBA do Excel: certifique-se de que as Macros estão habilitadas nas configurações de segurança do Excel (Arquivo > Opções > Central de Confiabilidade > Configurações da Central de Confiabilidade > Configurações de Macro > Habilitar todas as macros). Em ambientes corporativos, pode ser necessário adicionar o arquivo à lista de locais confiáveis.
Tratamento de erros
A DLL retorna erros de forma estruturada. Sempre verifique a propriedade UltimoErro quando o status não for "issued":
- AUTH_ERROR — API Key inválida ou sem permissão
- COMPANY_NOT_FOUND — Company ID incorreto
- CERTIFICATE_EXPIRED — certificado A1 vencido no servidor Emitare
- PROVIDER_ERROR — prefeitura retornou erro (detalhes em
UltimoErroDetalhe) - VALIDATION_ERROR — JSON inválido ou campo obrigatório faltando
- NETWORK_ERROR — sem conexão com a internet
Distribuição para outras máquinas
Para distribuir a EmitareCOM.dll junto com o seu software, basta incluir a DLL no instalador e executar o registro (regsvr32) durante a instalação. Se usar Inno Setup, NSIS ou InstallShield, já existem funções prontas para registrar DLLs COM automaticamente durante a instalação.