2015-03-04 1 views
-1

J'utilise une fonction de .dll natif dans le code C# et parfois l'assertion suivante appelle:ne peut pas attraper appel assert de dll natif .NET

#include <assert.h> 
... 
assert(e > 0.0); 

Mais je ne peux pas l'attraper dans mon. Application NET (il ne fait que s'écraser). Comment puis-je gérer cela?

+0

Vous ne pouvez pas. Assurez-vous que vous appelez le code correctement au lieu de vous fier aux exceptions. C'est exactement ce que les affirmations sont pour. – SBI

+2

C'est * signifié * pour planter/annuler. La solution est de ne pas passer une (combinaison de) entrées à la fonction de sorte qu'elles violent les conditions préalables nécessaires pour la fonction, y compris celle-ci. –

+0

Vous devez rester à un mile du code qui est si peu fiable que l'auteur ne lui fait pas assez confiance pour vous donner la version Release. Ou vous feriez mieux d'établir une bonne relation de travail avec lui, ça va prendre du temps pour obtenir les bugs. La chose la plus importante à faire pour vous est de lui donner de petits projets de repro pour qu'il puisse réparer ses bugs. –

Répondre

1

au moins en lisant le Wiki:

Lorsqu'il est exécuté, si l'expression est fausse (qui est, compare égal à 0), assert() écrit des informations sur l'appel qui a échoué sur stderr puis appels abandonner().

Et le MSDN

Évalue une expression et, lorsque le résultat est faux, imprime un message de diagnostic et termine le programme.

donc pas d'exception ... un message d'erreur et le programme meurt. Rien à saisir ici :-)

Ensuite, nous pourrions parler de la différence dans la gestion des paramètres entre C et C# ... En C vous tuez le programme avec un assert, en C# vous jetez une exception catcheable (ArgumentException) .. Différentes méthodologies :-)

Maintenant, comment le gérer? Ne pas provoquer assert échouer est une bonne méthode :-) assert sont des erreurs de terminal (car même en C ils ne peuvent pas être manipulés), donc ils ne devraient pas arriver.