Il est vraiment intéressant que le code C# suivant plante sur .NET4.0 mais fonctionne correctement sur .NET2.0.Pourquoi AccessViolationException ne peut pas être interceptée par .NET4.0
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;
}
Si la compilation du code ci-dessus C# contre .NET2.0, tout fonctionne bien. Seulement le compiler contre .NET4.0 le fera planter au moment de l'exécution.
Je soupçonne que le mécanisme de prise d'exception système a été modifié depuis .NET4.0. Des idées?
Bonne réponse. Merci beaucoup!!!! Cette question m'a embrouillé pendant longtemps. –
Je poursuivais ce problème depuis une semaine! La seule chose que je peux utilement faire avec mon état corrompu est le redémarrage. C'est une application de console qui devrait fonctionner 24 heures par jour. Maintenant ça va. – Andiih
@Andiih sauf si les bits corrompus sont le code qui le relancerait. J'utiliserais des chiens de garde externes à cette fin. –