2009-10-12 17 views
8

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

9

Mit P/Invoke ist es sicher zu sagen, dass es zwei Arten von Fehlern gibt, die Sie behandeln müssen.

  1. Ausnahmen von P/Invoke selbst ausgelöst.
  2. 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.

4

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).

3

auch:

  • DllNotFoundException
  • BadImageFormatException (DLL ist falsch Format oder beschädigt)
  • MethodAccessException (Versuch durch Sicherheitstransparente Methode, um nativen Code aufzurufen)