2009-10-12 2 views
8

Что такое исключения может возникать при использовании PInvoke или все ошибки обрабатываются возвращаемыми значениями метода, и разработчик может проверить и при необходимости увеличить исключения?Обработка исключений .NET PInvoke

ответ

9

С P/Invoke можно с уверенностью сказать, что вам нужно обрабатывать два типа ошибок.

  1. Исключения, брошенные P/Invoke.
  2. Ошибки, возвращаемые DLL, вы призываете/

С 1-й группе есть несколько исключений, которые могут произойти (не окончательный список):

  • EntryPointNotFoundException
  • ExecutionEngineException
  • MissingMethodException
  • NotSupportedException

С группой 2 вам необходимо проверить результат возврата вашего вызова функции/функции P/Invoked и действовать соответствующим образом. Здесь полезен Marshal.GetLastWin32Error().

Именно поэтому всегда лучше создавать классы-оболочки для любого родного материала, который вам нужно использовать. Таким образом, вы можете преобразовать результаты возврата в исключения и разделить свой управляемый и собственный код.

4

Я не уверен, если есть окончательный список исключений, которые могут быть выброшены, но я знаю, по крайней мере, следующее может произойти

  • AccessViolationException
  • StackOverflowException
  • Исключение, когда DLL с именем не найден. Не помню, тип с верхней части моей головы
  • OutOfMemoryException

Большинство из этих типов исключений не являются специфическими для PInvoke и может произойти в любой момент в программе. Единственное, что связано с вызовом PInvoke, - это не найденное DLL исключение (тип которого я не помню).

3

также:

  • DllNotFoundException
  • BadImageFormatException (DLL является неправильный формат или поврежден)
  • MethodAccessException (Попытка защищенного прозрачного метода вызвать собственный код)