Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Bom dia,

estou com um problema com o ACBRECF.

Atualizei os fontes do ACBR e compilei o exemplo do ECFTeste para fazer alguns testes. Quando vou ativar a impressora dá um access violation.

Tenho um exemplo antigo do ECFTeste que funciona perfeitamente.

Gostaria de saber se tem algum procedimento a ser feito quando a pessoa atualiza os fontes do acbr. Se tem que compilar e instalar novamente os pacotes.

  • 2 semanas depois ...
Postado

eu to com dois problemas.

um é quando, no ACBrPAF, dou um PAF.PAF_N.LerDadosArquivo. mais exatamente no Arquivo.LoadFromFile(APathArquivo).

e o outro é no ACBrECF, no próprio exemplo do ACBr, na função ECF.Ativar.

bom que tudo funcionava tranquilamente, foi depois de alguma atualização pelo svn.

já desinstalei tudo, recompilei e instalei novamente e continua dando erro.

Postado

Tenho o mesmo problema no Delphi 6. Quando tento ativar a impressora fiscal ocorre a mensagem:

Exception EAccessViolation in module ECFTeste.exe at 00002270.

Access violation at address 00402270 in module 'ECFTeste.exe'. Write of address AD0ABC18.

No Delphi 7 ativa normalmente.

Tentei em várias máquinas, inclusive em máquinas que só tem Delphi 6 instalado. Só consigo fazer funcionar em versões do Delphi superiores a 6.

A Versão que estou utilizando é a 2.01 ACBR 0.9.0a

Gostaria de saber se existe incompatibilidade do ACBR com a versão Delphi 6.

Postado

Pois é, mas no caso de incompatibilidade com o Delphi 6, deveriamos ter uma informação oficial do projeto ACBR, para que os usuários que não tem como migrar no momento para versões superiores, não fiquem tentando fazer rodar!

Obrigado pela Atenção!

  • Fundadores
Postado

Ou então podemos ter a ajuda de usuários que ainda usam Delphi 6 para testar e compatibilizar o projeto... Afinal é tudo ObjectPascal... com certeza com alguns IFDEFs você pode nos ajudar nessa tarefa... Basta por a mão na massa e tentar...

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.

  • 2 semanas depois ...
Postado

Pessoal não sei se já conseguiram, acredito que não pois atualizei meu componente e ainda continua com o mesmo problema.

Vou listar aqui algumas coisas que percebi, dei uma mexida, mas ainda não procurei uma solução

1 - Comentei toda a rotina da procedure WriteToTXT da unit ACBrUtil, assim já consegui ativar o componente.

2 - No demo foi implementado o evento OnBobinaAdicionaLinhas, removi a rotina e já estou conseguindo imprimir alguma coisa, mas ainda apresenta erro em determinadas rotinas, mas ainda apresenta os AV em algumas pontos.

De momento foi o que percebi, mas como disse ainda não fiz nada para resolver, apenas estou identificando a causa problema.

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Postado

Pessoal não sei se já conseguiram, acredito que não pois atualizei meu componente e ainda continua com o mesmo problema.

Vou listar aqui algumas coisas que percebi, dei uma mexida, mas ainda não procurei uma solução

1 - Comentei toda a rotina da procedure WriteToTXT da unit ACBrUtil, assim já consegui ativar o componente.

2 - No demo foi implementado o evento OnBobinaAdicionaLinhas, removi a rotina e já estou conseguindo imprimir alguma coisa, mas ainda apresenta erro em determinadas rotinas, mas ainda apresenta os AV em algumas pontos.

De momento foi o que percebi, mas como disse ainda não fiz nada para resolver, apenas estou identificando a causa problema.

Erro do WriteToTXT:

Codigo Atual:

Procedure WriteToTXT( const ArqTXT, AString : AnsiString;

   const AppendIfExists : Boolean = True; AddLineBreak : Boolean = True );

var

  FS : TFileStream ;

  LineBreak : AnsiString ;

begin

  FS := TFileStream.Create( String( ArqTXT ), IfThen( AppendIfExists and FileExists(String(ArqTXT)),

      fmOpenReadWrite, fmCreate) or fmShareDenyWrite );


  try

    if AddLineBreak then

      LineBreak := AString + sLineBreak;


    FS.Seek(0, soFromEnd);  // vai para EOF

    FS.Write(Pointer(LineBreak)^,Length(LineBreak));


    if AddLineBreak then

    begin

      LineBreak := sLineBreak;

      FS.Write(Pointer(LineBreak)^,Length(LineBreak));

    end ;

  finally

    FS.Free ;

  end;

end;
Código anterior que funciona aqui pra mim:
Procedure WriteToTXT( const ArqTXT, AString : AnsiString;

   const AppendIfExists : Boolean = True; AddLineBreak : Boolean = True );

var

  FS : TFileStream ;

  Buffer : AnsiString ;

begin

  FS := TFileStream.Create( ArqTXT, IfThen( AppendIfExists and FileExists(ArqTXT),

     fmOpenReadWrite, fmCreate) or fmShareDenyWrite );

  try

     Buffer := AString ;

     if AddLineBreak then

        Buffer := Buffer + sLineBreak ;


     FS.Seek(0, soFromEnd);  // vai para EOF

     FS.Write(Pointer(Buffer)^,Length(Buffer));

  finally

     FS.Free ;

  end;

end;

Diferença: na atual o comando FS.Write é chamado duas vezes uma para escrever o texto da constante AString e depois é chamado novamente para escrever o Linebreak, na anterior era chamado somente uma vez.

Pergunta: Existe mesmo a necessidade do código atual ser desta forma ou pode voltar a ser o que era antes? estou pensando em adicionar um diretiva de compilação para verificar a versão do delphi, mas vai gerar uma duplicidade de código, com diferenças minimas.

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Postado

Pessoal achei mais uma coisa, quando implementado o evento OnBobinaAdicionaLinhas o componente chama uma rotina chamada MemoLeParams na unit ACBrECF.pas, aqui no meu caso sempre da erro de AV nessa rotina e também na rotina LerINI da unit ACBrRFD.pas, as duas utilizam o TMemIniFile para fazer a leitura das informações dos arquivos de .INI.

Estive verificando aqui como uma versão mais antiga que está funcionando e infelizmente não constatei nenhum diferença entre o código anterior e o atual, apenas os erros que ocorrem dentro das rotinas citadas na versão atual, mas nem sempre na mesma linha, sempre muda a linha do erro, o que me deixa meio confuso sobre a causa do problema,

Acredito que possa ser também problema referente a versão do delphi em que os componentes estão sendo alterados, exemplo a classe TMemIniFile está na unit Inifiles e a unit Inifiles do Delphi XE não é igual a do delphi 6 , 7 , ....

Me corrijam se estiver errado, mas acho que esse pode ser o problema, nas versões mais novas pode haver tratamentos que não existiam nas anteriores, essa é minha opinião.

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

  • Consultores
Postado

Pode ser... Você usa o FastMM no seu projeto?

Caso contrário, poderia usá-lo e verificar se existe alguma diferença?

[]'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.
Postado

Não utilizo, mas vou dar uma olhada e ver se descubro alguma coisa, nas verdade desconheço o FastMM, estou dando uma procurada no google.

Vou tentar aqui, mas se não der certo, eu já estava com vontade de dar um upgrade na versão do Delphi mesmo assim pelo menos já passo pro delphi 7...rsrs...

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

  • 10 meses depois ...
Postado (editado)

Pessoal, eu sei que faz tempo que ninguém passa por aqui, mas o erro continua quando compilado no Delphi 6. 

 

Percebi que o erro ocorre na unit ACBrUtil.pas, onde existem vários cast's para String, onde na versão do acbr que eu utilizo não existem. Verificando a própria unit, achei a função ACBrStr que faz a compatibilidade necessária conforme o compilador, então troquei os cast's de String() para ACBrStr() e compilou de boa no Delphi 6. Testei também no Delphi XE2 e também funcionou normal...

 

Segue a unit em anexo..

 

 

ACBrUtil.pas

Editado por jGuto
Postado

Régys, obrigado por enviar ao SVN, porém atualizei o ACBr hoje, e voltaram a ACBrUtils.pas com os cast's para string novamente, voltando a ocasionar erro para quem usa delphi 6...

Postado

Régys, poderíamos manter a forma como o jGuto fez, porém dentro da function ACBrStr que ele colocou no lugar dos cast para string, coloríamos uma diretiva para identificar a versão do delphi, assim manteríamos a compatibilidade com a as versões mais novas e com o Delphi 6.

 

Acredito que dessa forma seria mais pratico, ou então poderíamos colocar as diretivas em todos os lugares onde tivessem os casts.

 

Prefiro a primeira opção...rs!!!

 

 

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

  • Consultores
Postado

Eu acho que vocês estão atacando o problema pelo lado errado. Estão tentando remover um sintoma sem entender a causa dele. Ninguém explicou como é que um simples cast para string causa um Access Violation.

 

Eu sugeri antes, e vou fazê-lo mais uma vez: Usem o FastMM no seu projeto e tentem verificar se o erro continua ocorrendo.

O gerenciador de memória do Delphi 7 é sofrível, mas o do Delphi 6 É PÉSSIMO. Talvez isso possa estar relacionado.

  • Curtir 1

[]'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.
Postado

Já tentamos com o fastMM, e com o EurekaLog, porém quando colocamos ele no projeto parece que eles ocultam os erros, e não apresenta os access violation, é só tirar eles do projeto que voltar a dar os Access violation.

 

Os  Access violation só aparecem quando rodamos a aplicação pelo Delphi, quando rodamos por fora o sistema já trava.

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

  • Consultores
Postado

Já tentamos com o fastMM, e com o EurekaLog, porém quando colocamos ele no projeto parece que eles ocultam os erros, e não apresenta os access violation, é só tirar eles do projeto que voltar a dar os Access violation.

 

Os  Access violation só aparecem quando rodamos a aplicação pelo Delphi, quando rodamos por fora o sistema já trava.

Acho que você deve estar enganado. Eles não ocultam o erro. Eles corrigem o erro.

 

Ainda não entendi, qual o sentido de dar um Access Violation em um Cast de string para string?

[]'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.
  • Este tópico foi criado há 3951 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.