.NET PInvoke Ausnahmebehandlung

8

Welche Ausnahmen können auftreten, wenn PInvoke verwendet wird oder werden alle Fehler von den Rückgabewerten der Methode behandelt, und es liegt im Ermessen des Entwicklers, Ausnahmen zu überprüfen und ggf. auszulösen?

    
Robert MacLean 12.10.2009, 15:44
quelle

4 Antworten

9

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

  1. Ausnahmen, die von P / Invoke selbst ausgelöst wurden.
  2. Fehler, die von den DLLs zurückgegeben werden, die Sie gerade aufrufen /

Bei Gruppe 1 gibt es einige Ausnahmen, die auftreten können (nicht die definitive Liste):

  • EntryPointNotFoundException
  • ExecutionEngineException
  • MissingMethodException
  • NotSupportedException

Bei Gruppe 2 müssen Sie das Rückgabeergebnis Ihrer P / Aufgerufenen 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 Ihre Rückgabeergebnisse in Ausnahmen konvertieren und Ihren verwalteten und systemeigenen Code trennen.

    
ParmesanCodice 12.10.2009, 16:01
quelle
4

Ich bin nicht sicher, ob es eine definitive Liste der Ausnahmen gibt, die ausgelöst werden können, aber ich weiß, dass mindestens das Folgende auftreten kann

  • AccessViolationException
  • StackOverflowException
  • Ausnahme, wenn DLL-Name nicht gefunden wird. Ich kann mich nicht an den Typ von meinem Kopf erinnern
  • OutOfMemoryException

Die meisten dieser Ausnahmetypen sind nicht für PInvoke spezifisch und können an jedem Punkt im Programm auftreten. Der einzige, der für den PInvoke-Aufruf spezifisch ist, ist die DLL-Ausnahme nicht gefunden (an den Typ kann ich mich nicht erinnern).

    
JaredPar 12.10.2009 15:45
quelle
3

Auch:

  • DllNotFoundException
  • BadImageFormatException (DLL ist falsches Format oder beschädigt)
  • MethodAccessException (Versuch durch Sicherheitsmethode, um systemeigenen Code aufzurufen)
Kevin P. Rice 15.03.2013 04:00
quelle
1

pinvoke wirft auch ein MissingMethodException auf mobile Geräte, wenn der Prozess nicht genügend Arbeitsspeicher hat: Ссылка

    
knittl 06.05.2010 08:22
quelle

Tags und Links