Es ist wirklich interessant, dass der folgende C# -Code auf .NET4.0 abstürzt, aber auf .NET2 gut funktioniert.Warum AccessViolationException von .NET4.0 nicht abgefangen werden kann
C# -Code
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++ Code
extern "C" __declspec(dllexport) int ExceptionTest()
{
IUnknown* pUnk = NULL;
pUnk->AddRef();
return 0;
}
die oben C# -Code gegen .NET2.0 Wenn kompilieren, funktioniert alles einwandfrei. Nur wenn es gegen .NET4.0 kompiliert wird, wird es zur Laufzeit abstürzen.
Ich vermute, dass System Ausnahme Catch-Mechanismus seit .NET4.0 geändert wurde. Irgendwelche Ideen?
Große Antwort. Danke vielmals!!!! Diese Frage verwirrte mich lange Zeit. –
Ich habe dieses Problem seit einer Woche verfolgt! Die eine Sache, die ich nützlich mit meinem verdorbenen Zustand tun kann, ist Neustart. Es ist eine Konsolen-App, die * 24 Stunden am Tag * laufen sollte. Jetzt wird es. – Andiih
@Andiih, es sei denn, die beschädigten Bits sind der Code, der es neu starten würde. Ich würde zu diesem Zweck externe Wachhunde verwenden. –