Ir para conteúdo
  • Cadastre-se

dev botao

Utilizando o ACBRCEP com NodeJs


Ver Solução Respondido por Marcelo Wanderley,
  • Este tópico foi criado há 526 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado (editado)
3 minutos atrás, Renato Rubinho disse:

Você deve identificar a variável com endereço de resposta e o tamanho do buffer, no segundo e terceiro parâmetros.

https://acbr.sourceforge.io/ACBrLib/CEP_BuscarPorCEP.html

 

Olá Renato obrigado pela atenção.

Estou fazendo assim.

const path = require('path');
const ffi = require('ffi-napi');
const ref = require('ref-napi');
 
const pathDllACBrLibCEP = path.join(__dirname, 'ACBrCEP64.dll')
var eArqConfig = path.join(__dirname, 'config.ini');
var eChaveCrypt = '';
 
var lib = ffi.Library(pathDllACBrLibCEP, {
    CEP_Inicializar: ['int', ['string', 'string']],
    CEP_Finalizar: ['int', []],
    CEP_BuscarPorCEP: ['int', ['string', 'string', 'int']],
})
 
try {
 
    var inicio = 2;
    const buflength = 256;
 
    let aloc_sResposta = Buffer.alloc(buflength);
    let aloc_esTamanho = ref.alloc('int', buflength);
 
    inicio = lib.CEP_Inicializar(eArqConfig, eChaveCrypt);
    console.log(`iniciou >>>>>>> ${inicio}`);
 
    inicio = lib.CEP_BuscarPorCEP('55612450', aloc_sResposta, aloc_esTamanho);
    console.log(`ultmio retorno >>>>>>>> ${inicio}`);
    console.log(`Retorno: `, aloc_sResposta.toString());
 
    inicio = lib.CEP_Finalizar();
    console.log(`finalizar >>>>>>>> ${inicio}`);
 
} catch (error) {
    console.error('An error occurred:', error)
}
2 minutos atrás, antonio.carlos disse:

image.png

funcionando também..

 

Obrigado pela atenção Antonio.

Não entendo porque não funciona conosco   :(

Editado por Marcelo Wanderley
  • Consultores
Postado
4 horas atrás, Marcelo Wanderley disse:

Sim copiei.

 

image.png.d11aa058f7350f8224f5e8d0f6599c9c.png

Você precisa deixar apenas a versão ACBrLib que estiver usando..
Se estiver consumindo ACBrCEP64, deixe somente esta ACBrLib na pasta.. pode remover o 32..

  • Consultores
Postado

Não conheço Node, mas já vi relatos de erros semelhantes em outras linguagens onde as duas variáveis que recebem os retorno funcionam colocando o @ na frente

@aloc_sResposta por exemplo

Postado
7 minutos atrás, antonio.carlos disse:

ambiente agora parece correto.. 
tente fazer um teste com esta ACBrLibCEP
ACBrCEP64.dll
 

e com este ACBrLib.ini
ACBrLib.ini

 

Log
16/06/23 18:20:54:063 - TLibCEPConfig.AplicarConfiguracoes: C:\Users\sistemas\Desktop\Projeto\qualinfo\testeACBR\ACBrLib.ini
16/06/23 18:20:54:066 - Travar
16/06/23 18:20:54:067 - TLibCEPConfig.AplicarConfiguracoes - Feito
16/06/23 18:20:54:068 - Destravar
16/06/23 18:20:54:070 - TLibCEPConfig.Ler - Feito
16/06/23 18:20:54:071 - Destravar
16/06/23 18:20:54:164 - LIB_Inicializar( C:\Users\sistemas\Desktop\Projeto\qualinfo\testeACBR\ACBrLib.ini,  )
16/06/23 18:20:54:258 -    ACBrLibCEP Demo - 0.0.1.135
16/06/23 18:20:54:350 - CEP_BuscarPorCEP( 55612450 )
16/06/23 18:20:54:352 - Travar
16/06/23 18:20:54:696 - Destravar
16/06/23 18:20:54:698 -    SetRetorno(-10, Access violation)
16/06/23 18:20:54:701 - LIB_Finalizar
16/06/23 18:20:54:702 - Finalizar

  • Consultores
Postado

O AV deve estar acontecendo devido aos retornos.

22 minutos atrás, Renato Rubinho disse:

Não conheço Node, mas já vi relatos de erros semelhantes em outras linguagens onde as duas variáveis que recebem os retorno funcionam colocando o @ na frente

@aloc_sResposta por exemplo

Isso faz sentido para você?

Outra coisa, tente também aumentar o buffer.

  • Consultores
Postado
10 minutos atrás, Marcelo Wanderley disse:

 

Log
16/06/23 18:20:54:063 - TLibCEPConfig.AplicarConfiguracoes: C:\Users\sistemas\Desktop\Projeto\qualinfo\testeACBR\ACBrLib.ini
16/06/23 18:20:54:066 - Travar
16/06/23 18:20:54:067 - TLibCEPConfig.AplicarConfiguracoes - Feito
16/06/23 18:20:54:068 - Destravar
16/06/23 18:20:54:070 - TLibCEPConfig.Ler - Feito
16/06/23 18:20:54:071 - Destravar
16/06/23 18:20:54:164 - LIB_Inicializar( C:\Users\sistemas\Desktop\Projeto\qualinfo\testeACBR\ACBrLib.ini,  )
16/06/23 18:20:54:258 -    ACBrLibCEP Demo - 0.0.1.135
16/06/23 18:20:54:350 - CEP_BuscarPorCEP( 55612450 )
16/06/23 18:20:54:352 - Travar
16/06/23 18:20:54:696 - Destravar
16/06/23 18:20:54:698 -    SetRetorno(-10, Access violation)
16/06/23 18:20:54:701 - LIB_Finalizar
16/06/23 18:20:54:702 - Finalizar

estranho..
consegue fazer um teste em outra máquina ? algo do tipo ?
Porque é a ACBrLib e ACBrLib.ini que fiz os testes acima conforme imagem que te mandei..
ACBrLibCEP Demo-20230616.log

Postado
2 minutos atrás, Renato Rubinho disse:

O AV deve estar acontecendo devido aos retornos.

Isso faz sentido para você?

Outra coisa, tente também aumentar o buffer.

Em javascript e node não necessita do @

Aumentei e nada. Coloquei 512

Agora, antonio.carlos disse:

estranho..
consegue fazer um teste em outra máquina ? algo do tipo ?
Porque é a ACBrLib e ACBrLib.ini que fiz os testes acima conforme imagem que te mandei..
ACBrLibCEP Demo-20230616.log

Vou tentar em outra maquina.

  • Consultores
Postado
1 minuto atrás, Marcelo Wanderley disse:

Vou tentar em outra maquina.

Qualquer coisa me avise, podemos tentar criar um ambiente aqui também, não programo em Node, mas com sua ajuda acho que podemos fazer este tipo de teste também..
Por enquanto tudo certo quando ao OpenSSL e a convenção de chamada do ACBrLib com o Node.JS

  • Curtir 1
  • Consultores
Postado
2 minutos atrás, Marcelo Wanderley disse:

O que significa Access violation?

16/06/23 18:20:54:698 -    SetRetorno(-10, Access violation)

Falha de segmentação, ocorre quando tenta acessar um endereço na memória que está reservado para outro programa ou que não existe ou carga de uma versão errada da DLL

Postado
7 minutos atrás, antonio.carlos disse:

Falha de segmentação, ocorre quando tenta acessar um endereço na memória que está reservado para outro programa ou que não existe.

Testamos em outra máquina e ocorre o mesmo problema

Postado (editado)
45 minutos atrás, Renato Rubinho disse:

O AV deve estar acontecendo devido aos retornos.

Isso faz sentido para você?

Outra coisa, tente também aumentar o buffer.

Ainda sem sucesso.

 

Editado por Marcelo Wanderley
  • Solution
Postado

Pessoal, consegui.

Segue abaixo a solução funcionando.

Obrigado a todos pela atenção.

 

const path = require('path');
const ffi = require('ffi-napi');
const ref = require('ref-napi');
 
const pathDllACBrLibCEP = path.join(__dirname, 'ACBrCEP64.dll')
var eArqConfig = path.join(__dirname, 'ACBrLib.ini');
var eChaveCrypt = '';
 
var tint = ref.refType('int');
var tchar = ref.refType('char *');
 
var lib = ffi.Library(pathDllACBrLibCEP, {
    CEP_Inicializar: ['int', ['string', 'string']],
    CEP_Finalizar: ['int', []],
    CEP_BuscarPorCEP: ['int', ['string', tchar, tint]],
})
 
try {
 
    var inicio = 2;
    const buflength = 256;
 
    let aloc_sResposta = Buffer.alloc(buflength);
    let aloc_esTamanho = ref.alloc('int', buflength);


 
    inicio = lib.CEP_Inicializar(eArqConfig, eChaveCrypt);
    console.log(`iniciou >>>>>>> ${inicio}`);
 
    inicio = lib.CEP_BuscarPorCEP('55612-450', aloc_sResposta, aloc_esTamanho);
    console.log(`ultmio retorno >>>>>>>> ${inicio}`);
    console.log(`Retorno: `, aloc_sResposta.toString());
   
 
    inicio = lib.CEP_Finalizar();
    console.log(`finalizar >>>>>>>> ${inicio}`);
 
} catch (error) {
    console.error('An error occurred:', error)
}

 
  • Curtir 1
  • Consultores
Postado

Para documentação, caso alguém tenha o mesmo problema, faz diferença o tipo de variável ser char* ou poderia ser string e faltava apenas declarar e utilizá-la ao "declarar a lib"?

 

Postado
13 horas atrás, Renato Rubinho disse:

Para documentação, caso alguém tenha o mesmo problema, faz diferença o tipo de variável ser char* ou poderia ser string e faltava apenas declarar e utilizá-la ao "declarar a lib"?

 

Pode ser  ref.refType('string') também.

faltava declarar como tipo para declarar na lib.

  • Curtir 1
  • Consultores
Postado
16 horas atrás, Marcelo Wanderley disse:

Pessoal, consegui.

Segue abaixo a solução funcionando.

Obrigado a todos pela atenção.

 

const path = require('path');
const ffi = require('ffi-napi');
const ref = require('ref-napi');
 
const pathDllACBrLibCEP = path.join(__dirname, 'ACBrCEP64.dll')
var eArqConfig = path.join(__dirname, 'ACBrLib.ini');
var eChaveCrypt = '';
 
var tint = ref.refType('int');
var tchar = ref.refType('char *');
 
var lib = ffi.Library(pathDllACBrLibCEP, {
    CEP_Inicializar: ['int', ['string', 'string']],
    CEP_Finalizar: ['int', []],
    CEP_BuscarPorCEP: ['int', ['string', tchar, tint]],
})
 
try {
 
    var inicio = 2;
    const buflength = 256;
 
    let aloc_sResposta = Buffer.alloc(buflength);
    let aloc_esTamanho = ref.alloc('int', buflength);


 
    inicio = lib.CEP_Inicializar(eArqConfig, eChaveCrypt);
    console.log(`iniciou >>>>>>> ${inicio}`);
 
    inicio = lib.CEP_BuscarPorCEP('55612-450', aloc_sResposta, aloc_esTamanho);
    console.log(`ultmio retorno >>>>>>>> ${inicio}`);
    console.log(`Retorno: `, aloc_sResposta.toString());
   
 
    inicio = lib.CEP_Finalizar();
    console.log(`finalizar >>>>>>>> ${inicio}`);
 
} catch (error) {
    console.error('An error occurred:', error)
}

 

Que legal que funcionou, quiser anexar os fontes, podemos disponibilizar em nosso svn, para que outros colegas possam usar como referencia e estudos..

  • Curtir 1
  • Este tópico foi criado há 526 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.