Ir para conteúdo
  • Cadastre-se

dev botao

Erro em Destroy de ACBrECF: Invalid pointer operation


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

Recommended Posts

Toda vez que eu fecho meu formulário que possui o componente ACBrECF, um erro é lançado com essa mensagem: "Invalid pointer operation". Porém esse erro só ocorre se eu efetuar uma venda primeiro e então fechar o formulário.

Depois do ShowModal do meu formulário, eu executo FreeAndNil nele, e então o erro é lançado. Debugando isso, percebi que o erro ocorre no destrutor do TACBrECFBematech.Destroy, que possuí a seguinte implementação:


destructor TACBrECFBematech.Destroy;

begin

  fsModelosCheque.Free ;


  inherited Destroy ;

end;

Ou seja, o formulário sendo destruído e todos os seus componentes presentes nele pela chamada de FreeAndNil, o ACBrECF também terá que ser destruído e é nessa linha acima, inherited Destroy; que ocorre o erro. Vou postar a implementação da criação, exibição, e destruição do formulário. O evento OnClose desse formulário também: Criação

procedure TfrmPrincipal.acVendaPDVExecute(Sender: TObject);

var

  pdv: TfrmVendaPDV;

begin

  pdv := TfrmVendaPDV.Create(Self);

  pdv.ShowModal();

  FreeAndNil(pdv);

end;

OnClose

procedure TfrmVendaPDV.FormClose(Sender: TObject; var Action: TCloseAction);

var

  mr: TModalResult;

  estadoECF: TACBrECFEstado;

begin

  estadoECF := ecf.Estado;

  mr := mrNone;


  if not (estadoECF = estNaoInicializada) then

    mr := Application.MessageBox('Deseja realmente fechar?', 'Fechar', MB_YESNO + MB_ICONQUESTION);


  if (mr = mrYes) or (mr = mrNone) then

  begin

    Screen.OnActiveControlChange := nil;

    dsVenda.DataSet.Close();

    dsItemVenda.DataSet.Close();

    dsItemServico.DataSet.Close();

    DMComercial.clearInformacaoAdicionalPDV();


    if (estadoECF = estVenda) or (estadoECF = estPagamento) then

      ecf.CancelaCupom();

  end

  else if (mr = mrNo) then

    Abort();

end;

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Não creio que seja no componente... observe que o Demo ECFTeste não dispara essa exception... outro fato é que não há report semelhante a esse por conta de outros usuários...

O Destroy da Classe Bematech está correto... ela não está destruindo o componente e sim uma Classe interna, essa chamada irá chamar:

TACBrECFClass.Destroy;

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

Daniel Simoes, eu já imaginava que não fosse um problema com o componente, é claro. Por algum motivo, eu não posso destruir os objetos de formas de pagamento retornados pela função AchaFPGDescricao();

Toda vez que eu executava o método efetuaPagamento, e passava as informações sobre a forma de pagamento, eu destruia ela, visto que eu não necessito mais dela. Olha no meu print a linha que executa o erro (fpFormasPagamentos.Free):

semttulobms.png

Resolvi o problema suprimindo a destruição desse objeto de forma de pagamento, mas daí eu terei um objeto em memória desnecessariamente?

Valeu

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Você não deve destruir esses objetos... deixe que o próprio ACBrECF faça isso... não há vazamento de memórias no ACBrECF...

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

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