Ir para conteúdo
  • Cadastre-se

dev botao

Recommended Posts

Postado

Bom dia!

Erro "Privileged instruction at 0x0538dac3" ao acessar TACBrSATDinamico_stdcall.ConsultarSAT pela gersat.dll do SAT da Epson

Uso Delphi XE10 Seattle
Já tentei:

1. Atualizar a dll

2. Atualizar o ACBr todo

3. Configurei permissões de segurança na pasta e no arquivo dll

4. Debugando o destaque da imagem abaixo é exatamente o ponto no qual o Delphi levanta a exceção, mas mesmo executando um "Trans Into" do debug do Delphi, não sou levado a mais nenhuma linha de código, pois acredito que esse erro venha da dll

5. ACBr retorna a resposta "NumeroSessao: 430873 - Resposta:430873|08000|SAT em operação||" no log, mas o código quebra com essa exceção ... o próprio ACBr exibe a mensagem "Privileged instruction" no log

image.png.9dda50c47f87eda5d995b40171508a71.png

Deduzi que poderia ser alguma problema da dll, por isso procurei por atualização

Alguém tem mais alguma ideia do que eu possa fazer para resolver esse problema?

Postado

Ah, mais um detalhe
Tenho uma outra versão desse aplicativo, também no Delphi XE10 Seattle.
Do ponto de vista de código de acesso ao SAT via ACBr, não tem diferenças, mas foi compilado em 04/08/2021
Essa versão funciona, mas não estou podendo mais atualizar.

Postado

Estou executando a aplicação como Administrador

De qualquer forma fiz uma pequena aplicação de teste, que registra chamada a função ConsultarSAT da dll diretamente

function ConsultarSAT( numeroSessao : LongInt ) : PAnsiChar ; Stdcall; External 'GERSAT.dll';

Nessa mesma aplicação executo a seguinte função, que funciona perfeitamente:

procedure TForm1.btnConsultarClick(Sender: TObject);
begin
  gNumeroSessao:= Random(999999);
  edtNumeroSessao.Text:= IntToStr(gNumeroSessao);
  edtRetornoConsulta.Text:= UTF8ToString(ConsultarSAT(gNumeroSessao));
end;
 

Nota toda a bibliteca ACBr funciona perfeitamente em quase todos os SAT, somente esse está dando esse erro

E além desse erro, agora a pouco recebi os seguintes erros:

floating point stack check at <endereço hexadecimal>, que no log está sendo exibido assim: "Invalid floating point operation"

e

Access violation at address 0548DB1F. Write of address 00000004

Já trabalho com SAT com o ACBr já faz tempo e nunca tive um problema como esse

 

Postado

Bom dia
Agradeço pela resposta, mas se você revisar o exemplo teste citado acima, que usa stdcall e está funcional concluo não ser a causa do problema.

O trecho de código que enviei na pergunta original corrobora com a minha conclusão, pois o erro ocorre depois da function TACBrSATDinamico_stdcall.ConsultarSAT comunicar-se com a dll usando stdcall e receber a resposta corretamente na seguinte linha:

Resp := xSAT_ConsultarSAT( numeroSessao ) ;

Ou seja, chamada usando stdcall funciona.

O erro é levantado quando a function TACBrSATDinamico_stdcall.ConsultarSAT vai retornar o resultado, portanto o trabalho de comunicação com a dll já foi feito e funcionou corretamente.

 

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.