Was Ausnahmen kann auftreten, wenn PInvoke oder alle Fehler von der Methode Rückgabewerte behandelt werden, und es ist Aufgabe des Entwicklers zu überprüfen und Ausnahmen auslösen, wenn nötig?.NET PInvoke Exception Behandlung
Antwort
Mit P/Invoke ist es sicher zu sagen, dass es zwei Arten von Fehlern gibt, die Sie behandeln müssen.
- Ausnahmen von P/Invoke selbst ausgelöst.
- Fehler, die durch die DLL zurück Sie/berufen sich
mit Gruppe 1 gibt es ein paar Ausnahmen sind die (nicht die endgültige Liste) auftreten:
- EntryPointNotFoundException
- ExecutionEngineException
- MissingMethodException
- NotSupportedException
Mit Gruppe 2 müssen Sie das Rückgabeergebnis Ihrer P/Invoked Methode/Funktionsaufruf überprüfen und entsprechend handeln. Marshal.GetLastWin32Error() ist hier praktisch.
Deshalb ist es immer am besten, Wrapper-Klassen für jedes native Material zu erstellen, das Sie verwenden müssen. Auf diese Weise können Sie die zurückgegebenen Ergebnisse in Ausnahmen konvertieren und den verwalteten und systemeigenen Code trennen.
Ich bin mir nicht sicher, ob es eine endgültige Liste der Ausnahmen, die ausgelöst werden können, aber ich weiß zumindest die folgenden können
- Access
- Stackoverflow
- Ausnahme auftreten, wenn DLL mit dem Namen wurde nicht gefunden. Kann nicht den Typ aus der Spitze von meinem Kopf erinnern
- OutOfMemoryException
Die meisten dieser Ausnahmen Typen sind nicht spezifisch für PInvoke und an einer beliebigen Stelle im Programm auftreten können. Der einzige, der für den PInvoke-Aufruf spezifisch ist, ist die DLL-Ausnahme nicht gefunden (an den Typ kann ich mich nicht erinnern).
pinvoke wirft auch ein MissingMethodException
auf mobilen Geräten, wenn der Prozess nicht genügend Arbeitsspeicher ist: http://www.tomergabel.com/NETCompactFrameworkPInvokeAndMissingMethodException.aspx
auch:
DllNotFoundException
BadImageFormatException
(DLL ist falsch Format oder beschädigt)MethodAccessException
(Versuch durch Sicherheitstransparente Methode, um nativen Code aufzurufen)
- 1. AOP Exception Behandlung
- 2. Boost Exception Behandlung
- 3. One-Line-Exception-Behandlung
- 4. Java Exception Behandlung in "Ereignissen"
- 5. Exception Behandlung in Grails Controller
- 6. WCF REST Services - Generische Exception-Behandlung
- 7. GCC comp_except_specs und Exception Behandlung/Parsing
- 8. So umgehen Sie Laravel Exception-Behandlung
- 9. .NET Exception Explorer
- 10. C#/C++ pInvoke Tipps
- 11. .Net 3.5 Chart Controls Exception
- 12. .NET IO Exception "Invalid Signature"
- 13. Break on Exception. NET 2010
- 14. . NET-Exception-Handling-Anwendung Konfigurationsdatei
- 15. SystemStackError in Ruby Exception Behandlung mit Aquarium (Aspektorientierte Programmierung)
- 16. Exception-Behandlung mit Hibernate-Vorlage im Spring-Framework
- 17. Automatische Cookie-Behandlung C# /. NET HttpWebRequest + HttpWebResponse
- 18. Ruby Net :: SFTP-Transfer-Interrupt-Behandlung
- 19. Wie PInvoke SFileFindFirstFile
- 20. PInvoke Unwuchten der Stapel
- 21. Set InnerException von .NET Exception-Objekt
- 22. .NET - First-Exception-Listener für intensives Debugging?
- 23. PInvoke Fehler, wenn in ihm
- 24. Reverse PInvoke von nativem C++
- 25. pinvoke SysListView Get Context Menu
- 26. vb.net/pinvoke: Enum spezifische Prozessfenster
- 27. Möglicher F # Interaktiver PInvoke-Fehler
- 28. FaultException-Behandlung in BizTalk
- 29. . NET - Überprüfen, ob das Verzeichnis ohne Ausnahme-Behandlung zugänglich ist
- 30. Antlr Behandlung Ausnahmen