Ir para conteúdo
  • Cadastre-se

dev botao
  • Este tópico foi criado há 3525 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Olá,

  implementei o processamento dos NF-e(geração, assinatura, envio e impressão) usando Thread.

  eu estava tendo um problema ao buscar os certificados, e verifiquei que no método "TCertificadosConf.GetCertificado" da unit ACBrCTeConfiguracoes, existe a chamada "CoInitialize(nil)" com o comentário "PERMITE O USO DE THREAD".

  Coloquei este mesmo código "CoInitialize(nil);" no método "TCertificadosConf.GetCertificado" da unit "ACBrNFeConfiguracoes" e o erro parou de ocorrer.

  isso é correto?

  

obrigado pela atenção.

Carlos H. Marian

Analista de Sistemas

|/-\|

Postado

Olá,

   estou tendo o seguinte retorno:

   "CoInitialize não foi chamado, ClassID: {91D221C4-0CD4-461C-A728-01D509321556}"

   quando chama o método "TCertificadosConf.GetCertificado"

 

at+

Carlos H. Marian

Analista de Sistemas

|/-\|

  • 1 ano depois...
Postado (editado)

Que tipo de problema que vc estava tendo?

 

Boa tarde André,

 

Enfrentei o mesmo problema que o Carlos.

 

O erro realmente ocorre quando executado o método GetCertificado dentro de uma Thread.

A Thread necessita que o comando CoInitialize(nil) seja executado, para processar corretamente a API do ActiveX.

 

Para resolver esse problema criei uma condição de compilação, segue em anexo o fonte para ser analisado.

ACBrNFeConfiguracoes.pas

ACBrNFeConfiguracoes.pas

Editado por Vanessinha Mocellin
  • Curtir 4

Att. Vanessa Mocellin | Arquiteta de Sistemas 
Sysmo Sistemas Ltda
São Miguel do Oeste - SC | Filial: Itajaí - SC
Fone: 49 3631.0600 | Ramal: 612

www.sysmo.com.br

  • 2 meses depois ...
Postado

Não

Você baixou o código? testou em sua aplicação? resolveu seu problema?

Boa tarde Juliomar

 

Resolve sim, é apenas uma diretiva de compilação, optei por fazer dessa forma para que o processamento de quem não utiliza Thread permaneça o mesmo.

Para quem utiliza com Thread, basta adicionar a diretiva de compilação em seu projeto.

Att. Vanessa Mocellin | Arquiteta de Sistemas 
Sysmo Sistemas Ltda
São Miguel do Oeste - SC | Filial: Itajaí - SC
Fone: 49 3631.0600 | Ramal: 612

www.sysmo.com.br

  • Moderadores
Postado

Boa tarde Juliomar

 

Resolve sim, é apenas uma diretiva de compilação, optei por fazer dessa forma para que o processamento de quem não utiliza Thread permaneça o mesmo.

Para quem utiliza com Thread, basta adicionar a diretiva de compilação em seu projeto.

No caso estava falando para o Caetano ! 

Para ver se ele fez o teste e baixou o código seu e testou

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado

No caso estava falando para o Caetano ! 

Para ver se ele fez o teste e baixou o código seu e testou

Eu entendi a quem estava sendo direcionada a pergunta Juliomar hehehe a questão é que não tinha porque não fucionar kkkk

Att. Vanessa Mocellin | Arquiteta de Sistemas 
Sysmo Sistemas Ltda
São Miguel do Oeste - SC | Filial: Itajaí - SC
Fone: 49 3631.0600 | Ramal: 612

www.sysmo.com.br

Postado

Olá.

Baixei e testei, pra mim não deu certo, continuo o mesmo erro.

CoInitialize não foi chamado, ClassID: {88D969E5-F192-11D4-A65F-0040963251E5}

Atenciosamente

Caetano

'Juntos podemos mais'

Postado (editado)

Boa tarde.

Hoje resolvi atualizar o ACBr, dai quando fui rodar a aplicação, me deparei com o erro: OLeSysError with message 'CoInitialize não foi chamado'.

No Delphi aqui, quando dá o erro, ele abre e fica parado na unit ACBrNFeUtil.

 

Detalhe, já utilizamos thread antes para emitir as notas, já havia descomentado a linha CoInitialize(nil); // PERMITE O USO DE THREAD

Mas como atualizei pelo tortoise, deu conflito e resolvi o conflito dando preferência para o arquivo do projeto ACBr, depois olhei lá e o mesmo já veio com a uses da unit ActiveX e a linha CoInitialize(nil); // PERMITE O USO DE THREAD descomentada, mas o erro continua.

 

Alguém já conseguiu resolver?

Obrigado.

Editado por Leandro Araújo

Leandro Araújo, Analista de Sistemas.

  • Moderadores
Postado

Boa tarde

Não serviu o método inserido aqui no código?

então é conforme solicitei acima para que fosse feito testes, dois colegas (Vanessa e Caetano) avisaram que funcionou , mas no seu caso não!

precisa encontrar em seu código o que está ocorrendo ou se for problema com essa alteração, achar o erro debugando e repassar aqui a solução para resolvermos

  • Curtir 1
Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado (editado)

Boa tarde

Não serviu o método inserido aqui no código?

então é conforme solicitei acima para que fosse feito testes, dois colegas (Vanessa e Caetano) avisaram que funcionou , mas no seu caso não!

precisa encontrar em seu código o que está ocorrendo ou se for problema com essa alteração, achar o erro debugando e repassar aqui a solução para resolvermos

Bom dia Juliomar.

Acho que não esclareci direito.

Já funcionava antes, com a linha 'CoInitialize(Nil)' descomentada.

Apenas atualizei os fontes, observei que já está vindo com a mesma linha descomentada e a uses da ActiveX, porém o erro persiste, como se não estivesse chamando o método, não estou utilizando essas as diretivas de compilaçao do ACBr.inc incluídas pelos colegas {IFDEF ACBrThread}.

Obrigado.

Editado por Leandro Araújo

Leandro Araújo, Analista de Sistemas.

Postado

Achei, pelo menos eu acho.

Percebi uma chamada de 'CoUninitialize' na unit ACBrNFeConfiguracoes.

Comentei, no bloco finally da function GetCertificado a chamada 'CoUninitialize', testei e funcionou, depois descomentei novamente e deu o erro.

finally
			  Lista.free;
			end;
            break;
          end;
         Extension := nil;
       end;

      break;
    end;
  end;

  if not(Assigned(Result)) then
    raise EACBrNFeException.Create('Certificado Digital não encontrado!');
  finally
    // CoUninitialize;
  end;

Tem algum problema em comentar ai?

Obrigado.

Leandro Araújo, Analista de Sistemas.

Postado (editado)

Não daria para chamar na 'Finalization' da aplicação?
Ou então, chamar novamente o 'CoUnitialize' lá na ACBrNFEUtil, onde está o erro?

Desculpem não poder indicar em qual procedure ou function ocorre o erro, por algum motivo o IDE aqui não está debugando, mas mesmo assim para lá na untit ACBrNFEUtil.

Editado por Leandro Araújo

Leandro Araújo, Analista de Sistemas.

  • Este tópico foi criado há 3525 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.