Quelles sont les exceptions peuvent se produire lors de l'utilisation de PInvoke ou toutes les erreurs traitées par la méthode renvoient-elles des valeurs et il appartient au développeur de vérifier et de lever des exceptions si nécessaire?.NET PInvoke Gestion des exceptions
Répondre
Avec P/Invoke, il est sûr de dire qu'il existe deux types d'erreurs que vous devez gérer.
- Exceptions levées par P/Invoke lui-même.
- erreurs renvoyées par les dll vous invoquez/
Avec le groupe 1, il y a quelques exceptions qui peuvent se produire (et non la liste définitive):
- EntryPointNotFoundException
- ExecutionEngineException
- MissingMethodException
- NotSupportedException
Avec le groupe 2, vous devez vérifier le résultat de retour de votre appel de méthode/fonction appelée/invoquée et agir de manière appropriée. Marshal.GetLastWin32Error() est pratique ici.
C'est pourquoi il est toujours préférable de créer des classes wrapper pour tout contenu natif que vous devez utiliser. De cette façon, vous pouvez convertir vos résultats de retour en exceptions et séparer votre code managé et natif.
Je ne sais pas s'il y a une liste définitive des exceptions qui peuvent être levées, mais je sais au moins les éléments suivants peuvent se produire
- AccessViolationException
- StackOverflowException
- Exception lorsque DLL nommée n'est pas trouvé. Ne me souviens pas du type du haut de ma tête
- OutOfMemoryException
La plupart de ces types d'exceptions ne sont pas spécifiques à PInvoke et peut se produire à tout moment dans le programme. Le seul spécifique à l'appel PInvoke est l'exception DLL non trouvée (dont je ne me souviens pas du type).
PInvoke jette également un MissingMethodException
sur les appareils mobiles, lorsque le processus est hors de la mémoire: http://www.tomergabel.com/NETCompactFrameworkPInvokeAndMissingMethodException.aspx
aussi:
DllNotFoundException
BadImageFormatException
(DLL est un format incorrect ou corrompu)MethodAccessException
(Tentative par méthode transparente de sécurité pour appeler le code natif)
- 1. Gestion des exceptions GetGlobalResourceObject
- 2. DB2 Gestion des exceptions
- 3. Python Gestion des exceptions
- 4. Gestion des exceptions ASP.NET MVC
- 5. Problème de gestion des exceptions
- 6. Pratiques de gestion des exceptions
- 7. Robuste gestion des exceptions Javascript
- 8. lambdas et gestion des exceptions
- 9. Silerlight MVVM Gestion des exceptions
- 10. Client de service Web (.NET 2008), gestion des exceptions?
- 11. Bibliothèques de gestion des exceptions conviviales pour WinForms (.NET)
- 12. Fichier de configuration de l'application de gestion des exceptions .NET
- 13. .NET: Comment Pinvoke UpdateProcThreadAttribute
- 14. Gestion des exceptions/gestion des ressources dans Jersey JAX-RS
- 15. Gestion des exceptions dans les appels Ajax
- 16. Gestion des exceptions d'événements de contrôle ASP.NET
- 17. Gestion des exceptions à partir de WS
- 18. Gestion du problème des exceptions non gérées
- 19. Java gestion des exceptions - exception personnalisée
- 20. Modèles de gestion des exceptions de GCC
- 21. Gestion des exceptions avec WPF et MVVM
- 22. C# Gestion des exceptions dans les classes
- 23. Gestion des exceptions de thread dans WCF
- 24. Gestion des exceptions de multithreading asynchrone?
- 25. Java Gestion des exceptions dans les "événements"
- 26. Gestion des exceptions ASP.Net Ajax côté serveur
- 27. Gestion des exceptions au démarrage du service
- 28. Gestion des exceptions globales Flex 3
- 29. Gestion des exceptions et messages conviviaux
- 30. Services Web et gestion des exceptions de Compact Framework