>> So it means that you are changing the ErrorSys somewhere in your application.
>> Are you using a modified ErrSysW.prg ?
Yes Antonio! Just adding this function below:
&& ------------------------------
FUNCTION gpfHandler( oException )
&& ------------------------------
LOCAL oError
LOCAL cMensagemErro := ""
LOCAL nCodigoErro := 0
&& -- Verificando se oException é um objeto para iniciar o tratamento
IF typeCheck( oException, "O" )
nCodigoErro := oException:ExceptionRecord:ExceptionCode
&& -- Verificando qual tipo de exceção foi levantada
SWITCH nCodigoErro
CASE EXCEPTION_ACCESS_VIOLATION
cMensagemErro := "EXCEPTION_ACCESS_VIOLATION - O thread tentou ler/escrever num endereço virtual ao qual não tinha acesso."
EXIT
CASE EXCEPTION_DATATYPE_MISALIGNMENT
cMensagemErro := "EXCEPTION_DATATYPE_MISALIGNMENT - O thread tentou ler/escrever dados desalinhados em hardware que não oferece alinhamento. Por exemplo, valores de 16 bits precisam ser alinhados em limites de 2 bytes; valores de 32 bits em limites de 4 bytes, etc. "
EXIT
CASE EXCEPTION_ARRAY_BOUNDS_EXCEEDED
cMensagemErro := "EXCEPTION_ARRAY_BOUNDS_EXCEEDED - O thread tentou acessar um elemento de array fora dos limites e o hardware possibilita a checagem de limites."
EXIT
CASE EXCEPTION_FLT_DENORMAL_OPERAND
cMensagemErro := "EXCEPTION_FLT_DENORMAL_OPERAND - Um dos operandos numa operação de ponto flutuante está desnormatizado. Um valor desnormatizado é um que seja pequeno demais para poder ser representado no formato de ponto flutuante padrão."
EXIT
CASE EXCEPTION_FLT_DIVIDE_BY_ZERO
cMensagemErro := "EXCEPTION_FLT_DIVIDE_BY_ZERO - O thread tentou dividir um valor em ponto flutuante por um divisor em ponto flutuante igual a zero."
EXIT
CASE EXCEPTION_FLT_INEXACT_RESULT
cMensagemErro := "EXCEPTION_FLT_INEXACT_RESULT - O resultado de uma operação de ponto flutuante não pode ser representado como uma fração decimal exata."
EXIT
CASE EXCEPTION_FLT_INVALID_OPERATION
cMensagemErro := "EXCEPTION_FLT_INVALID_OPERATION - Qualquer operação de ponto flutuante não incluÃda na lista."
EXIT
CASE EXCEPTION_FLT_OVERFLOW
cMensagemErro := "EXCEPTION_FLT_OVERFLOW - O expoente de uma operação de ponto flutuante é maior que a magnitude permitida pelo tipo correspondente."
EXIT
CASE EXCEPTION_FLT_STACK_CHECK
cMensagemErro := 'EXCEPTION_FLT_STACK_CHECK - A pilha ficou desalinhada ("estourou" ou "ficou abaixo") como resultado de uma operação de ponto flutuante.'
EXIT
CASE EXCEPTION_FLT_UNDERFLOW
cMensagemErro := "EXCEPTION_FLT_UNDERFLOW - O expoente de uma operação de ponto flutuante é menor que a magnitude permitida pelo tipo correspondente."
EXIT
CASE EXCEPTION_INT_DIVIDE_BY_ZERO
cMensagemErro := "EXCEPTION_INT_DIVIDE_BY_ZERO - O thread tentou dividir um valor inteiro por um divisor inteiro igual a zero."
EXIT
CASE EXCEPTION_INT_OVERFLOW
cMensagemErro := "EXCEPTION_INT_OVERFLOW - O resultado de uma operação com inteiros causou uma transposição (carry) além do bit mais significativo do resultado."
EXIT
CASE EXCEPTION_PRIV_INSTRUCTION
cMensagemErro := "EXCEPTION_PRIV_INSTRUCTION - O thread tentou executar uma instrução cuja operação não é permitida no modo de máquina atual."
EXIT
CASE EXCEPTION_IN_PAGE_ERROR
cMensagemErro := "EXCEPTION_IN_PAGE_ERROR - O thread tentou acessar uma página que não estava presente e o sistema não foi capaz de carregar a página. Esta exceção pode ocorrer, por exemplo, se uma conexão de rede é perdida durante a execução do programa via rede."
EXIT
CASE EXCEPTION_ILLEGAL_INSTRUCTION
cMensagemErro := "EXCEPTION_ILLEGAL_INSTRUCTION - O thread tentou executar uma instrução inválida."
EXIT
CASE EXCEPTION_NONCONTINUABLE_EXCEPTION
cMensagemErro := "EXCEPTION_NONCONTINUABLE_EXCEPTION - O thread tentou continuar a execução após a ocorrência de uma exceção irrecuperável."
EXIT
CASE EXCEPTION_STACK_OVERFLOW
cMensagemErro := "EXCEPTION_STACK_OVERFLOW - O thread esgotou sua pilha (estouro de pilha)."
EXIT
CASE EXCEPTION_INVALID_DISPOSITION
cMensagemErro := "EXCEPTION_INVALID_DISPOSITION - Um manipulador (handle) de exceções retornou uma disposição inválida para o tratador de exceções. Uma exceção deste tipo nunca deveria ser encontrada em linguagens de médio/alto nÃvel."
EXIT
CASE EXCEPTION_GUARD_PAGE
cMensagemErro := "CASE EXCEPTION_GUARD_PAGE"
EXIT
CASE EXCEPTION_INVALID_HANDLE
cMensagemErro := "EXCEPTION_INVALID_HANDLE"
EXIT
CASE EXCEPTION_SINGLE_STEP
cMensagemErro := "EXCEPTION_SINGLE_STEP Um interceptador de passos ou outro mecanismo de instrução isolada sinalizou que uma instrução foi executada."
EXIT
CASE EXCEPTION_BREAKPOINT
cMensagemErro := "EXCEPTION_BREAKPOINT - Foi encontrado um ponto de parada (breakpoint)."
EXIT
DEFAULT
cMensagemErro := "UNKNOWN EXCEPTION ( " + cStr( oException:ExceptionRecord:ExceptionCode ) + " )"
END
ENDIF
&& -- Verificando se houve erro GPF a nÃvel das TDialogs
oError := errorNew( "GPFHANDLER", 0, 0, procName(), "GPF - Erro Geral de Processo", { cMensagemErro, oException, nCodigoErro }, procFile(), procName(), procLine() )
eval( errorBlock(), oError ) // errorDialog( oError )<<-- Changed here as you suggested Antonio
RETURN( EXCEPTION_EXECUTE_HANDLER )
And calls on main with this:
setUnhandledExceptionFilter( @gpfHandler() )