Anticlei Scheid Postado 2 Outubro Postado 2 Outubro 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 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?
Anticlei Scheid Postado 2 Outubro Autor Postado 2 Outubro 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.
Fundadores Daniel Simoes Postado 2 Outubro Fundadores Postado 2 Outubro A DLL desse SAT, precisa que você rode a sua aplicação, como Administrador Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
Anticlei Scheid Postado 2 Outubro Autor Postado 2 Outubro 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
Fundadores Daniel Simoes Postado 2 Outubro Fundadores Postado 2 Outubro Essa DLL deve usar CDECL Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
Anticlei Scheid Postado 3 Outubro Autor Postado 3 Outubro 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.
Moderadores Juliomar Marchetti Postado 3 Outubro Moderadores Postado 3 Outubro Então para desencargo nessa função use como fez acima UTF8ToString(, mas ali no retorno Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Recommended Posts
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 contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora