Ir para conteúdo
  • Cadastre-se

dev botao

Erro ao assinar NF-e LIBXML2


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

Recommended Posts

Olá Boa tarde,

Após atualizar meu ACBr passei a ter A.V. ao assinar o arquivo xml

Fiz o Debug e percebi que o erro ocorria na ACBrLibXml2.pas e chamada da função

function InitLibXml2Interface: Boolean;
begin
  Result := LibXml2Loaded;
  if LibXml2Loaded then
    Exit;

  LibXML2CS.Enter;
  try
    {$IfDef ANDROID}
    if (LibXml2Path = '') then     // Try to load from "./assets/internal/" first
      LibXml2Path := TPath.GetDocumentsPath;

    Result := LoadLibraryLibXml2;
    if (not Result) then         // Try System Default Lib
    begin
      LibXml2Path := '';
      Result := LoadLibraryLibXml2;
    end;
    {$Else}
    Result := LoadLibraryLibXml2;
    {$EndIf}


    if Not Result then
    begin
      UnloadLibraryLibXml2;
      Exit;
    end;

    LoadLibXML2EntryPoints;

    // LibXML2 initialization
    if Assigned(_xmlInitCharEncodingHandlers) then
      _xmlInitCharEncodingHandlers;
    if Assigned(_xmlInitGlobals) then
      _xmlInitGlobals;
    if Assigned(_xmlInitThreads) then
      _xmlInitThreads;
    if Assigned(_xmlInitParser) then
      _xmlInitParser;

    LibXml2Loaded := True;
  finally
    LibXML2CS.Leave;
  end;
end;

Mais precisamente na linha 

LibXML2CS.Enter;

Utilizo o acbr e modulos do sistema em runtime e assim a instrução intialization não é executada

initialization
  LibXML2CS := TCriticalSection.Create;
  LibXml2LoadVerbose := False;
  LibXml2Loaded := False;
  LibXml2UnavailableFunctions := '';
  LibXml2Path := '';
  LibXml2Handle := 0;
  LibXml2File := '';

Portanto para corrigir esse problema fiz alguns ajustes na Unit, gostaria que analisassem e se possível subir uma atualização igual o semelhante a proposta

Obrigado

ACBrLibXml2.pas

Link para o comentário
Compartilhar em outros sites

  • Fundadores
  • Solution
9 minutos atrás, Ianice Lanziloti disse:

Utilizo o acbr e modulos do sistema em runtime e assim a instrução intialization não é executada

Não compreendi em que situação a sessão "initialization", não é chamada...

Essa característica poderá causar problemas em outras Units do ACBr

tente a solução proposta nesse tópico:
https://stackoverflow.com/questions/4618650/delphi-unit-initialization-not-always-called

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Tenho a aplicação principal e algumas BPL'S que são chamaras em runtime contendo os módulos do sistema.

Por estar carregando o modulo pckNfe.bpl em Runtime o aplicativo não executa a sessão "initialization", com isso ele não instancia o LibXML2CS

Uma forma solucionar o problema, seria adicionar na aplicação principal a dependência do ACBR, oque não seria interessante.

A outra forma que eu encontrei e fazer isso sobre demanda, conforme a unit que enviei em anexo

 

 

Link para o comentário
Compartilhar em outros sites

  • Consultores
25 minutos atrás, Ianice Lanziloti disse:

Por estar carregando o modulo pckNfe.bpl em Runtime o aplicativo não executa a sessão "initialization",

Na verdade depende do modo como você está carregando o módulo. Para que a sessão initialization seja chamada deveria utilizar o método LoadPackage da unit SysUtils pra carregar a bpl.

http://docwiki.embarcadero.com/Libraries/en/System.SysUtils.LoadPackage

Caso você esteja carregando via um método do Sistema Operacional (LoadLibrary por exemplo), então você vai ter que chamar o método InitializePackage da mesma unit mencionada.

http://docwiki.embarcadero.com/Libraries/Rio/en/System.SysUtils.InitializePackage

Isso está explicado no link que o Daniel mencionou acima.

  • Curtir 1
  • Obrigado 2

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(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

  • Este tópico foi criado há 1468 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.