Es realmente interesante que el siguiente código C# se bloqueará en .NET4.0 pero funcionará bien en .NET2.0.Por qué AccessViolationException no puede ser capturado por .NET4.0
código C#
class Program
{
static void Main(string[] args)
{
try
{
ExceptionTest();
Console.WriteLine("Done!");
}
catch (Exception e)
{
Console.WriteLine("Error !!!");
Console.WriteLine(e.Message);
}
}
[DllImport("badapp")]
private static extern int ExceptionTest();
}
código C++
extern "C" __declspec(dllexport) int ExceptionTest()
{
IUnknown* pUnk = NULL;
pUnk->AddRef();
return 0;
}
Si compilar el código # C por encima contra .NET2.0, todo funciona bien. Solo compilarlo contra .NET4.0 lo hará bloquearse en tiempo de ejecución.
Estoy sospechando que el mecanismo de excepción de sistema ha sido cambiado desde .NET4.0. ¿Algunas ideas?
Great answer. ¡¡¡¡Muchas gracias!!!! Esta pregunta me confundió por mucho tiempo. –
¡He estado persiguiendo este problema por una semana! La única cosa que puedo hacer con mi estado corrupto es reiniciar. Es una aplicación de consola que * debería * funcionar las 24 horas del día. Ahora lo hará. – Andiih
@Andiih a menos que los bits dañados sean el código que lo reiniciaría. Usaría perros guardianes externos para este propósito. –