Membros Pro Renan Kemp Postado 13 Janeiro Membros Pro Compartilhar Postado 13 Janeiro (editado) Estou usando acbrLibNfe + node + openssl 1.1.x + MT + Cdecl ou StdCall (testei ambos) Carrego a lib atraves de uma função igual a do DEMO node const path = require('path') const ffi = require('ffi-napi') const ref = require('ref-napi') const fs = require('fs') import { Request, Response } from 'express' import { checkVersion } from '../utils/checkVersion' // const pathDllACBrLibNFeCdecl = path.join(__dirname, '../../../libs/acbr/ACBrLibNFe/bin/MT/Cdecl/ACBrNFe64.dll') // 64 bits const pathDllACBrLibNFeStdCall = path.join(__dirname, '../../../libs/acbr/ACBrLibNFe/bin/MT/StdCall/ACBrNFe64.dll') // 64 bits //export const buflength = 1024 * 16 export const buflength = 256 export const getLibNfe = async (): Promise<any> => { const libm = await ffi.Library(pathDllACBrLibNFeStdCall, { NFE_Inicializar: ['int', ['pointer', 'string', 'string']], NFE_Finalizar: ['int', ['pointer']], NFE_CarregarINI: ['int', ['pointer', 'string']], NFE_StatusServico: ['int', ['pointer', 'string', 'string']], NFE_UltimoRetorno: ['int', ['pointer', 'string', 'string']], NFE_Nome: ['int', ['pointer', 'string', 'string']], NFE_Versao: ['int', ['pointer', 'string', 'string']], NFE_ConfigLer: ['int', ['pointer', 'string']], NFE_ConfigGravar: ['int', ['pointer', 'string']], NFE_ConfigLerValor: ['int', ['pointer', 'string', 'string', 'string', 'string']], NFE_ConfigGravarValor: ['int', ['pointer', 'string', 'string', 'string']], NFE_ConfigImportar: ['int', ['pointer', 'string']], NFE_ConfigExportar: ['int', ['pointer', 'string', 'string']], NFE_ObterCertificados: ['int', ['pointer', 'string', 'string']], NFE_CarregarXML: ['int', ['pointer', 'string']], NFE_SalvarPDF: ['int', ['pointer', 'string', 'string']] }) return libm } Em seguida inicio e gero o INI usando esta rotina export const statusServico = async (certificate: TPfx): Promise<any> => { const lib = await getLibNfe() let handle = ref.alloc('pointer') let aloc_sResposta = Buffer.alloc(buflength) let aloc_esTamanho = ref.alloc('int', buflength) handle = await inicializarBiblioteca(lib, handle) await configGravar(lib, handle) } export const configGravar = async (lib: any, handle: any): Promise<any> => { const dateAndHoursAA_MM_DD_HH_MM_SS = new Date().toISOString().replace(/:/g, '-') const iniPathGravar = path.resolve(__dirname, `../../logsIni/ACBrNFeServicosGravar${dateAndHoursAA_MM_DD_HH_MM_SS}.ini`) // NFE_ConfigGravar const retNFE_ConfigGravar = await lib.NFE_ConfigGravar(handle, iniPathGravar) if (retNFE_ConfigGravar !== 0) { const errorMessageResult = await errorMessage(handle, lib, retNFE_ConfigGravar) console.log('errorMessageResult: ', errorMessageResult) throw new Error(errorMessageResult) } return '' } async function inicializarBiblioteca(lib: any, handle: any): Promise<any> { const arqConfigFile = '' const retInicializar = await lib.NFE_Inicializar(handle, arqConfigFile, '') if (retInicializar !== 0) { throw new Error(`Falha ao inicializar: ${errorMessage(handle, lib, retInicializar)}`) } return ref.readPointer(handle, 0, buflength) } async function finalizarBiblioteca(lib: any, handle: any): Promise<any> { await lib.NFE_Finalizar(handle) } o que acho estranho é que sempre o ini gerado é igual ao anterior mesmo que eu reinicie a maquina parece que fica gravadoAnalisei a documentação mas não vejo o motivoremovi os ini das pastas para nao carregar automatico mas o cache continuao que me aconselhariamMuito obrigadohttps://acbr.sourceforge.io/ACBrLib/NFE_Inicializar.html o metodo que uso para pegar as configurações da dll e gerar o ini é NFE_ConfigGravar Editado 13 Janeiro por Renan Kemp Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Renan Kemp Postado 13 Janeiro Autor Membros Pro Compartilhar Postado 13 Janeiro eu sei que esta com cache por que sempre que o ini é gerado vem com a tag preenchida como fiz la atras, ja reinicie a maquina e persiste [Sistema] Nome=testeRenan Link para o comentário Compartilhar em outros sites More sharing options...
Consultores Solution EMBarbosa Postado 15 Janeiro Consultores Solution Compartilhar Postado 15 Janeiro Olá Renan, tudo blz? Em 13/01/2024 at 08:13, Renan Kemp disse: Cdecl ou StdCall (testei ambos) Isso não tem nada a ver com o problema, mas veja a seguinte informação: https://acbr.sourceforge.io/ACBrLib/CdeclouStdCallqualusar.html Você deve escolher o que for compatível com seu sistema e "ambiente destino" (aonde o sistema for executado). Em 13/01/2024 at 08:13, Renan Kemp disse: Em seguida inicio e gero o INI usando esta rotina Essa parte do código não me parece fazer nenhuma referência ao INI. Se fizer, me desculpe, pois node.js não é minha especialidade. Mas me aponte exatamente qual linha faz isso. Em 13/01/2024 at 08:23, Renan Kemp disse: eu sei que esta com cache por que sempre que o ini é gerado vem com a tag preenchida como fiz la atras, ja reinicie a maquina e persiste [Sistema] Nome=testeRenan A princípio, me parece que você está utilizando um mesmo arquivo escrito anteriormente. O arquivo .INI deve ter sido salvo no HD e, é claro, reiniciar a máquina por si só não vai apagar o conteúdo dele. Verifique no seu código onde você passa o arquivo .INI qual o caminho. Daí veja se o arquivo já não está salvo no HD. 3 []'s Elton Profissionalize o ACBr na sua empresa, conheça o ACBr Pro. (15) 2105-0750 (15)99790-2976. Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas. Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh. Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Renan Kemp Postado 16 Janeiro Autor Membros Pro Compartilhar Postado 16 Janeiro Olá tudo bem Sobre StdCall e Cdecl: Eu entendi que em node depende de onde compilo a aplicação * windows = StdCall * linux = Cdecl tentei inverter isso mas nao vi diferença no comportamento Atualmente estou testando em StdCall + windows + MT (MultiThread) Sobre o cache na dll: Tentei localizar algum arquivo ini com as tags que vinham no cache mas não encontrei mesmo com o auxilio do pesquisador de arquivos "Everything" A solução que encontrei foi carregar o arquivo INIsempre na inicialização. [RESOLVIDO] Muito Obrigado pela ajuda, se precisar de algo com node não exite em me chamar, estou aqui para ajudar tambem Obrigado 1 Link para o comentário Compartilhar em outros sites More sharing options...
Consultores Renato Rubinho Postado 16 Janeiro Consultores Compartilhar Postado 16 Janeiro Obrigado por reportar. 11 horas atrás, Renan Kemp disse: solução que encontrei foi carregar o arquivo INIsempre na inicialização. Perfeito, ao carregar o ini você será as configurações no componente utilizado pela lib. 11 horas atrás, Renan Kemp disse: se precisar de algo com node não exite em me chamar, estou aqui para ajudar tambem Parabéns pela iniciativa, esperamos sempre contar com a ajuda de todos, pois é assim que a comunidade se fortalece. Fechando. Para novas dúvidas, criar um novo tópico. 1 Link para o comentário Compartilhar em outros sites More sharing options...
Recommended Posts