2010-06-28 5 views
1

Mon C# a appelé une méthode d'une DLL C++, après que l'appel soit retourné, mon application est partie sans aucun message. vouloir ajouter essayer de rattraper pour obtenir la raison. Comment puis-je le faire. Juste un try-catch dans l'appel de la méthode?comment intercepter l'exception en C# qui appelle une DLL C++

EDIT: le [HandledProcessCorruptedStateExceptions] n'appartient pas à C#?

+0

Pouvez-vous montrer les pièces pertinentes du code? –

+0

Veuillez prendre le temps de résoudre les derniers threads que vous avez démarrés. –

Répondre

1

Un article intéressant sur la gestion des exceptions, également en ce qui concerne la manipulation des exceptions d'état corrompus:

CLR Inside Out: Handling Corrupted State Exceptions

Cependant, je suppose qu'il ya quelque chose de mal, soit dans la façon dont vous appelez la méthode native ou la méthode native elle-même. Il est préférable de corriger le problème d'origine à l'origine du moteur de recherche personnalisé au lieu d'intercepter les exceptions qui indiquent que votre application n'est plus dans un état stable. Vous ne ferez probablement qu'empirer les choses en attrapant une telle expcetion. L'article mentionné ci-dessus indique:

Même si le CLR vous empêche d'intercepter naïvement des CSE, ce n'est toujours pas une bonne idée d'attraper des classes d'exceptions trop larges. Mais catch (Exception e) apparaît dans beaucoup de code, et il est peu probable que cela change. En ne livrant pas d'exceptions qui représentent un état de processus corrompu au code qui attrape naïvement toutes les exceptions, vous empêchez ce code d'aggraver une situation sérieuse.

+0

+1. Il convient également de noter que les exceptions lancées à travers les limites de la DLL peuvent mener à toutes sortes de comportements non définis. Il est peu probable que l'on puisse les attraper de manière fiable, peu importe la technique utilisée. – stinky472

+1

@ stinky472: Lancer des exceptions sur les limites de la DLL n'est pas un problème, cela arrive tout le temps. Le problème est non géré vs géré. –

0
try{ 
    return (22/0); // Cant devise by 0 
}catch (System.DivideByZeroException ZeroEx) //Catch type of exception and assign to variable 
{ 
    Console.WriteLine("Division by zero attempted!"); 
    Console.WriteLine("Are you sure you wish to continue"); 
    string answer = Console.Read(); 
} 

Comme si

Questions connexes