c# - errores - Un doble dividido por cero está devolviendo un error de división por cero
system invalidoperationexception (1)
Estoy experimentando un comportamiento inesperado y esperaba que alguien pudiera ayudarlo con alguna orientación sobre en qué áreas enfocar una investigación.
Tengo dos métodos, uno esencialmente realiza una prueba de división por cero en un doble, el segundo llama a un método extern
para una dll no administrada.
Nota: En el tiempo de ejecución de .Net, dividir un Doble por Cero debería devolver un valor Infinito (de manera divertida de sabores positivos o negativos).
Pseudocódigo de lo que estoy haciendo se ve algo así:
InfinityTest(); // Returns an Infinity value as expected
DllCall();
InfinityTest(); // Divide by zero error on second call.
La primera llamada a InfinityTest()
devuelve el valor Infinity como se esperaba. La segunda llamada a InfinityTest()
lanza una excepción de Dividir por cero que no esperaba.
Actualizar
El código InfinityTest()
efectivo a continuación. Por brevedad, he eliminado los elementos try / catch, etc. No tengo permiso para entrar en detalles sobre el elemento pseudocódigo DllCall()
, disculpas.
private double InfinityTest()
{
double a = 1.0;
int b = 0;
return a / b;
}
Como parece que su DLL está cambiando la palabra de estado de FP en usted, su única opción puede ser volver a cambiarla. Yo sugeriría P / Invocar a _clearfp
o _fpreset
. Aquí están sus firmas P / Invoke:
[DllImport("msvcrt.dll")]
static extern UInt32 _clearfp();
[DllImport("msvcrt.dll")]
static extern void _fpreset();
Es posible que esto no restablezca las cosas exactamente de la forma en que se encontraban, pero esperamos que sea lo suficientemente cerca.