2009-10-12 8 views
8

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

9

Avec P/Invoke, il est sûr de dire qu'il existe deux types d'erreurs que vous devez gérer.

  1. Exceptions levées par P/Invoke lui-même.
  2. 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.

4

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

3

aussi:

  • DllNotFoundException
  • BadImageFormatException (DLL est un format incorrect ou corrompu)
  • MethodAccessException (Tentative par méthode transparente de sécurité pour appeler le code natif)
Questions connexes