Página 1 de 1

7908-Erro: Falha (...)overflow ou underflow, in the arithmet

MensagemEnviado: Seg Jul 02, 2012 6:17 pm
por Admin
"7908 - Erro: Falha no processo de geração do PDF, examine a mensagem de erro do windows [overflow ou underflow, in the arithmetic operation]".

Este código de erro foi reportado por um usuário na geração do PDF da NF-e em aplicação Delphi.

Aparentemente é um bug do .NET que ocorre quando se utiliza o System.Drawing.dll e o equipamento está com a FPU exception ativada:

http://www.pcreview.co.uk/forums/arithm ... 23086.html

A solução mais simples para solucionar o problema é desativar a FPU exception no caso do Delphi.

There is a possibility that floating point exceptions cause the problem. Most runtime environments disable floating point exceptions, but with Delphi, they are enabled.

The disable floating point exceptions, use the following code:

Código: Selecionar todos
Set8087CW($133f);


Note that this will change the behaviour of your own code as well. You will not get any exceptions any more, if there are errors in a floating point calculation, instead the result variable will be set to either NaN, Inf+ or Inf-.

http://stackoverflow.com/questions/9374 ... in-c-sharp

Re: 7908-Erro: Falha (...)overflow ou underflow, in the arithmet

MensagemEnviado: Sex Mai 18, 2018 1:14 am
por Admin
Contribuição do usuário: Renato Ribeiro Ricci

Olá, boa noite.. apenas para documentar. consegui solucionar o problema.. No lugar de Set8087CW($133f); eu precisei desabilitar o FPU de outra maneira.. segue para ficar documentado:

uses
math;

var
v_default_mskexcpt : TFPUExceptionMask;
begin

try

//guarda mascara de excecao atual na variavel.
v_default_mskexcpt := math.GetExceptionMask;


//desabilita FPU
Math.SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide, exOverflow,exUnderflow, exPrecision]);

Util := CreateOleObject('NFe_Util_2G.Util');
Util.geraPDFDANFE (etc, etc);
finally
Util := Unassigned;

//volta mascara como estava antes.
Math.SetExceptionMask(v_default_mskexcpt);
end;

end;