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

1

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).

2

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).

3

Registrar a DLL

Abra o Prompt de Comando como Administrador e execute o comando de registro:

cmd.exe (Administrador)
:: 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.

EmissaoNFSe.pas — Delphi XE+
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.

modNFSe.bas — Visual Basic 6
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.

Modulo1.bas — Excel VBA (Alt+F11)
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.