Ir para conteúdo
  • Cadastre-se

antonio.carlos

Consultores
  • Total de ítens

    1.937
  • Registro em

  • Última visita

  • Days Won

    2

Community Answers

  1. 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.. 
  2. 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
  3. 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(); }  
  4. 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.
  5. 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 
  6. 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.
  7. 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.. 
  8. antonio.carlos's post in ACBrLib was marked as the answer   
    @deciomantoanelli tudo bem ? 
    Se o seu Delphi for uma versão abaixo da 7, você precisa usar o ACBrLib ou ACBrMonitor..
    Agora se você usa delphi na versão acima da 7, melhor caminho é usar os componentes..
    https://projetoacbr.com.br/fontes/
  9. 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.
  10. 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..
     
  11. 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/
  12. 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.
  13. 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
  14. 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.
  15. 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.. 
  16. 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
  17. 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.
  18. 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 ?
  19. 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..
  20. 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:
     
  21. 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..
  22. 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.. 
  23. 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
     
  24. 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
  25. 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.
×
×
  • 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.

The popup will be closed in 10 segundos...