-
Total de ítens
1.937 -
Registro em
-
Última visita
-
Days Won
2
Community Answers
-
antonio.carlos's post in Uso da biblioteca ACBrLib MT com múltiplas Threads was marked as the answer
Falha de segmentação SIGSEGV é comum de erro em programação que ocorre quando um programa tenta acessar uma parte da memória que não tem permissão para acessar. Isso geralmente ocorre devido a bugs no código, como acessar um ponteiro nulo, acessar uma área de memória liberada ou escrever além dos limites de um array.
A linguagem de programação que você utiliza, não é minha linguagem nativa, então tive que fazer algumas pesquisas.. para entender a linguagem e tentar te ajudar..
Veja se essas opções não te ajuda em relação uso da ACBrLib MultiThread.
Adicione Sincronização:
Tente adicionar mutexes (travas) ao redor do código que está usando a biblioteca ACBrLibCTe. Isso pode ajudar a evitar condições de corrida entre as threads,
#include <dlfcn.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <pthread.h> #define NUMERO_DE_THREADS 1 #define NUMERO_DE_INSTANCIAS 5 #define ACBRLIBCTE "/usr/local/lib/libacbrcte64.so" typedef int (*inicializar_t)(u_int64_t *, char *, char *); typedef int (*finalizar_t)(u_int64_t); inicializar_t inicializar; finalizar_t finalizar; // Mutex para sincronização pthread_mutex_t acbrMutex = PTHREAD_MUTEX_INITIALIZER; void* run(void *); int main() { // Carrega a biblioteca ACBrLibCTe void *lib = dlopen(ACBRLIBCTE, RTLD_LAZY); if (!lib) { fprintf(stderr, "Erro ao carregar a biblioteca\n\n"); exit(1); } // Atualiza os ponteiros para as funções que serão testadas na ACBrLibCte inicializar = (inicializar_t)dlsym(lib, "CTE_Inicializar"); finalizar = (finalizar_t)dlsym(lib, "CTE_Finalizar"); // Cria vetor com as threads criadas pthread_t threads[NUMERO_DE_THREADS]; for(int i=0; i<NUMERO_DE_THREADS; i++) { // Define o número da Thread para mensagem de log int *nr_thread = malloc(sizeof(int)); *nr_thread = i; // Cria a thread e inicia execução pthread_create(&threads[i], NULL, run, (void *) nr_thread); } // Aguarda a finalização de todas as threads for(int i=0; i<NUMERO_DE_THREADS; i++) { pthread_join(threads[i], NULL); } // Encerra o uso da biblioteca dlclose(lib); // Destroi o mutex pthread_mutex_destroy(&acbrMutex); } void * run(void *p) { int nr_thread = *((int *) p); u_int64_t handle[NUMERO_DE_INSTANCIAS]; char *senha = calloc(64, sizeof(char)); strcpy(senha, "senha"); // Cria instâncias da biblioteca ACBrLibCTe for (int i = 0; i < NUMERO_DE_INSTANCIAS; i++) { pthread_mutex_lock(&acbrMutex); // Trava o mutex antes de acessar a biblioteca char *arquivo = calloc(64, sizeof(char)); sprintf(arquivo, "acbrlib-%d.ini", i); int retorno = inicializar(&handle[i], arquivo, senha); printf("(Thread #%2d - Instância #%2d) Função <<<CTE_Inicializar>>> [Retorno da Biblioteca: %d] [Handle retornado : %lu]\n", nr_thread, i, retorno, handle[i]); pthread_mutex_unlock(&acbrMutex); // Destrava o mutex após acessar a biblioteca } // Finaliza as instâncias da biblioteca ACBrLibCTe for (int i = 0; i < NUMERO_DE_INSTANCIAS; i++) { pthread_mutex_lock(&acbrMutex); int retorno = finalizar(handle[i]); printf("(Thread #%2d - Instância #%2d) Função <<<CTE_Finalizar >>> [Retorno da Biblioteca: %d] [Handle finalizado: %lu]\n", nr_thread, i, retorno, handle[i]); pthread_mutex_unlock(&acbrMutex); } // Libera o parâmetros free(p); return NULL; }
Inicialização Global:
Inicie a biblioteca uma vez no início do programa, antes de criar qualquer thread, e compartilhe o handle entre as threads. Isso evita a necessidade de inicialização concorrente. Aqui está um exemplo:
#include <dlfcn.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <pthread.h> #define NUMERO_DE_THREADS 1 #define NUMERO_DE_INSTANCIAS 5 #define ACBRLIBCTE "/usr/local/lib/libacbrcte64.so" typedef int (*inicializar_t)(u_int64_t *, char *, char *); typedef int (*finalizar_t)(u_int64_t); inicializar_t inicializar; finalizar_t finalizar; u_int64_t globalHandle; void* run(void *); int main() { // Carrega a biblioteca ACBrLibCTe void *lib = dlopen(ACBRLIBCTE, RTLD_LAZY); if (!lib) { fprintf(stderr, "Erro ao carregar a biblioteca\n\n"); exit(1); } // Atualiza os ponteiros para as funções que serão testadas na ACBrLibCte inicializar = (inicializar_t)dlsym(lib, "CTE_Inicializar"); finalizar = (finalizar_t)dlsym(lib, "CTE_Finalizar"); // Inicializa a biblioteca globalmente char *senha = calloc(64, sizeof(char)); strcpy(senha, "senha"); char *arquivo = "acbrlib-global.ini"; int retorno = inicializar(&globalHandle, arquivo, senha); // Cria vetor com as threads criadas pthread_t threads[NUMERO_DE_THREADS]; for(int i=0; i<NUMERO_DE_THREADS; i++) { // Define o número da Thread para mensagem de log int *nr_thread = malloc(sizeof(int)); *nr_thread = i; // Cria a thread e inicia execução pthread_create(&threads[i], NULL, run, (void *) nr_thread); } // Aguarda a finalização de todas as threads for(int i=0; i<NUMERO_DE_THREADS; i++) { pthread_join(threads[i], NULL); } // Finaliza a instância global da biblioteca retorno = finalizar(globalHandle); printf("(Global) Função <<<CTE_Finalizar >>> [Retorno da Biblioteca: %d] [Handle finalizado: %lu]\n", retorno, globalHandle); // Encerra o uso da biblioteca dlclose(lib); } void * run(void *p) { int nr_thread = *((int *) p); u_int64_t handle[NUMERO_DE_INSTANCIAS]; char *senha = calloc(64, sizeof(char)); strcpy(senha, "senha"); // Cria instâncias da biblioteca ACBrLibCTe for (int i = 0; i < NUMERO_DE_INSTANCIAS; i++) { char *arquivo = calloc(64, sizeof(char)); sprintf(arquivo, "acbrlib-%d.ini", i); int retorno = inicializar(&handle[i], arquivo, senha); printf("(Thread #%2d - Instância #%2d) Função <<<CTE_Inicializar>>> [Retorno da Biblioteca: %d] [Handle retornado : %lu]\n", nr_thread, i, retorno, handle[i]); } // Finaliza as instâncias da biblioteca ACBrLibCTe for (int i = 0; i < NUMERO_DE_INSTANCIAS; i++) { int retorno = finalizar(handle[i]); printf("(Thread #%2d - Instância #%2d) Função <<<CTE_Finalizar >>> [Retorno da Biblioteca: %d] [Handle finalizado: %lu]\n", nr_thread, i, retorno, handle[i]); } // Libera o parâmetros free(p); return NULL; }
Como você deve conhecer a linguagem que esta utilizando, acredito que estes dois exemplos possam te ajudar..
-
antonio.carlos's post in Acionamento de gaveta was marked as the answer
Olá @Henrique Lima tente utilizar este comando:
https://acbr.sourceforge.io/ACBrMonitor/AbreGaveta1.html
-
antonio.carlos's post in Metodos SAT_GerarPDFCancelamento C# was marked as the answer
O Método GerarPDFCancelamento já existe no ACBrLibSAT, só não estava implementado no programa exemplo, fiz um commit incluindo este método no programa exemplo
At revision: 30601
Referente o método SAT_Finalizar o mesmo já esta implementado no programa exemplo.. Para o C#, você pode usar o Dispose(); no FormClosed, igual ao programa exemplo, já ocorre a finalização da aplicação e finalização do ACBrLib.
private void FrmMain_FormClosed(object sender, FormClosedEventArgs e) { // Finalizando a dll acbrSat.Dispose(); }
-
antonio.carlos's post in C# - Percorrer notas was marked as the answer
Não temos..
Existe os métodos ObterXML ou GravarXML são métodos opcionais de uso, usado para salvar o xml antes do envio, geralmente é utilizado caso tenha um problema de comunicação e ai precisa usar o xml para consultar o protocolo, mas não temos nenhum método que percorra os xmls que foram adicionados a lista.
-
antonio.carlos's post in Erro no envio de um cancelamento de transação (CNC) TEF - TRANSACAO NAO ENCONTRADA [261] was marked as the answer
Olha os arquivos de requisição, o CRT parece correto, já o CNC, parece que esta faltando algumas informações para o cancelamento, pode ser um dos motivos da transação não ser encontrada
Vou deixar em anexo um exemplo CNC completo, use o arquivo como referencia e substitua com as informações do CRT.
intPos.001
Vou deixar também, manual com o detalhamento dos campos, pode ser que ajude na identificação das informações
https://devpaygo.readme.io/v13/docs/detalhamento-dos-campos
-
antonio.carlos's post in Acbr.pdv exemplo was marked as the answer
Provavelmente você esta distribuindo alguma ACBrLib na versão errada.
O Projeto ACBr.PDV, esta configurado para compilar em x86 (32bits), e o mesmo utiliza as ACBrLibs na versão MultiThread.
Então, você vai criar pasta ACBrLib e depois a pasta x86 e colar as ACBrLib em MultiThread para dentro desta pasta..
Veja programa exemplo rodando sem problemas.
-
antonio.carlos's post in Ajuda com ACBrLibNFSe no PHP (windows) was marked as the answer
Temos umas contribuições em PHP, talvez possa te ajudar nessa primeira etapa.
http://svn.code.sf.net/p/acbr/code/trunk2/Projetos/ACBrLib/Demos/PHP/
Os códigos foram contribuições de colegas que usando linguagem PHP, pode ser útil..
-
antonio.carlos's post in erro 999 nao catalogado was marked as the answer
@paulo sergio martins dutra bom dia, erro não catalogado, você precisa entrar em contato com a SEFAZ autorizadora, no caso SEFAZ-MG e verificar o motivo do erro.
-
antonio.carlos's post in ACBrBoleto no c# e vb.net was marked as the answer
Tópico movido para a área do SAC, para que o SLA de respostas seja considerado
@antoniosouzanet Dê uma olhada em nosso curso Introdução ao ACBrLib, veja essa aula aqui, nela mostra como utilizar ACBrLibBoleto no C#
Outro detalhe, temos programas exemplo também, onde estão as classes com os métodos de cada ACBrLib, você pode usar os fontes para estudos e após isso, aproveitar e utilizar essas classes para o seu Projeto, acaba facilitando um pouco o processo e te ajudando a entender como funcionar o ACBrLib.
Programa exemplo estão em nosso SVN, se você vai usar C#, veja que na pasta, temos classes compartilhadas, então se usar Boleto, você precisa da pasta Shared também..
-
antonio.carlos's post in ACBR Nodejs was marked as the answer
@gtvosouza1 bom dia !
Alguns colegas contribuíram com alguns códigos de exemplo, talvez possa te ajudar neste começo
http://svn.code.sf.net/p/acbr/code/trunk2/Projetos/ACBrLib/Demos/Node.js/
-
antonio.carlos's post in Erro retorno envio NFSe ACBrLibNFSe was marked as the answer
@LeonardoRocha boa tarde !
Fiz um teste com o Programa Exemplo em Java utilizando Linux Mint, usando a ultima versão do ACBrLibNFSe=1.0.0.30
Meu ACBrLib.ini
ACBrLib.ini
Veja os retornos em JSON:
Log ACBrLib
ACBrLibNFSe-20230627.log
Soap
1-lista-nfse-sinc-soap.xml
E validação do JSON:
jsononline-net.json
Quanto ao envio, eu não consigo fazer teste, pois não tenho certificado com permissão para envio..
Mas o retorno em JSON parece correto.. Tente uma instalação zerada com esta ultima versão do ACBrLib, veja se resolve.
-
antonio.carlos's post in Arquivo de Configuração da NFSe was marked as the answer
Arquivo de configuração ACBrLib.ini só vai ser criado depois que você instanciar e iniciar ACBrLibNFSe..
https://acbr.sourceforge.io/ACBrLib/ConfiguracoesdaBiblioteca22.html
-
antonio.carlos's post in Troca do PC exige reativação e/ou revinculação do aparelho SAT? was marked as the answer
Não é necessário..
Quando ocorre formatação, troca da máquina.
Você não precisa ativar e vincular o sat novamente, pois o mesmo já esta ativo e vinculado..
Você só precisa resolver instalação do driver e a comunicação dele, feito isso, pode usar normalmente sem problemas.
Ativação e vinculação só acontece quando é um SAT novo ou quando o Cliente mudou de CNPJ ou quando o SAT vai para outro CNPJ.
-
antonio.carlos's post in NFSe - VB.Net was marked as the answer
Você baixou somente o exemplo, está faltando algumas classes aí, veja que o projeto tem classes compartilhadas, então você precisa da pasta shared, também está no svn..
-
antonio.carlos's post in ACBrLib CTe - C# ToString INI was marked as the answer
Enviado um commit, com algumas melhorias nas classes para ACBrLibCTe - At revision: 29893
-
antonio.carlos's post in Problema ao imprimir QRCode was marked as the answer
Foi enviado um commit, At revision: 29779
Na próxima compilação do ACBrMonitorPLUS o novo método deve estar disponível para uso.
-
antonio.carlos's post in cancelamento ndse belford roxo rj was marked as the answer
Tópico movido para a área do SAC, para que o SLA de respostas seja considerado
Não tenho certeza, mas pode ser alguma instabilidade do lado do provedor, tentou contato com o provedor para saber do retorno ?
-
antonio.carlos's post in Ponto de captura TEF API PayGo was marked as the answer
Legal !!
Eu já acionei o time comercial TEF, logo eles vão entrar em contato você, para agilizar e te ajudar com os dados necessários para iniciar a homologação..
-
antonio.carlos's post in ACBrLibNFSe CancelarNFSe was marked as the answer
Isso pode variar de um provedor para o outro..
Geralmente o Cancelamento esta implementado, mas não são todos os provedores que utilizam..
Alguns provedores, fazem o cancelamento na hora, através do método, outros criam uma solicitação de cancelamento ou até mesmo alguns provedores requer que o cancelamento seja analisado por um fiscal da prefeitura, então não deixa fazer via webservice.
Melhor caminho é entrar em contato com o provedor e verificar qual o caminho para o cancelamento..
Este tópico pode te ajudar também:
-
antonio.carlos's post in ACBrPixCD em DLL was marked as the answer
Tópico movido para a área do SAC, para que o SLA de respostas seja considerado
Componente ACBrPIXCD ainda não esta disponível para ACBrLib e ACBrMonitor..
-
antonio.carlos's post in Erro .NET Framework NFSeLib em C#.net was marked as the answer
Tópico movido para a área do SAC, para que o SLA de respostas seja considerado
Se você mudar o programa exemplo para o framework que você tem instalado na máquina, vai funcionar também..
-
antonio.carlos's post in Boleto Hibrido santander was marked as the answer
@rpaulogio boa tarde, modelo Hibrido utilizando os componente ACBrBoleto, apenas Banco do Brasil
-
antonio.carlos's post in NFSE_ConsultarNFSeServicoTomadoPorPeriodo retorno xmlRetorno= was marked as the answer
Veja o Erro1, parece que você não configurou o certificado..
31/05/23 17:34:56:677 - SetRetorno(0, [Erro1]
Codigo=X801
Correcao=
Descricao=Erro ao Assinar: TDFeSSLXmlSignClass.Assinar, não implementado
https://acbr.sourceforge.io/ACBrLib/DFe.html
-
antonio.carlos's post in ACBrLibNFSe metódo LinkNFSE (C#) was marked as the answer
Quando puder, atualize ACBrLibNFSe, faça novos testes por favor.