.NET PInvoke Обработка исключений - PullRequest
8 голосов
/ 12 октября 2009

Какие исключения могут возникать при использовании PInvoke или все ошибки обрабатываются возвращаемыми значениями метода, и разработчик должен проверить и вызвать исключения, если это необходимо?

Ответы [ 4 ]

9 голосов
/ 12 октября 2009

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

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

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

  • EntryPointNotFoundException
  • ExecutionEngineException
  • MissingMethodException
  • NotSupportedException

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

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

4 голосов
/ 12 октября 2009

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

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

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

3 голосов
/ 15 марта 2013

Также:

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

pinvoke также выдает MissingMethodException на мобильных устройствах, когда процессу не хватает памяти: http://www.tomergabel.com/NETCompactFrameworkPInvokeAndMissingMethodException.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...