Что такое исключения может возникать при использовании PInvoke или все ошибки обрабатываются возвращаемыми значениями метода, и разработчик может проверить и при необходимости увеличить исключения?Обработка исключений .NET PInvoke
ответ
С P/Invoke можно с уверенностью сказать, что вам нужно обрабатывать два типа ошибок.
- Исключения, брошенные P/Invoke.
- Ошибки, возвращаемые DLL, вы призываете/
С 1-й группе есть несколько исключений, которые могут произойти (не окончательный список):
- EntryPointNotFoundException
- ExecutionEngineException
- MissingMethodException
- NotSupportedException
С группой 2 вам необходимо проверить результат возврата вашего вызова функции/функции P/Invoked и действовать соответствующим образом. Здесь полезен Marshal.GetLastWin32Error().
Именно поэтому всегда лучше создавать классы-оболочки для любого родного материала, который вам нужно использовать. Таким образом, вы можете преобразовать результаты возврата в исключения и разделить свой управляемый и собственный код.
Я не уверен, если есть окончательный список исключений, которые могут быть выброшены, но я знаю, по крайней мере, следующее может произойти
- AccessViolationException
- StackOverflowException
- Исключение, когда DLL с именем не найден. Не помню, тип с верхней части моей головы
- OutOfMemoryException
Большинство из этих типов исключений не являются специфическими для PInvoke и может произойти в любой момент в программе. Единственное, что связано с вызовом PInvoke, - это не найденное DLL исключение (тип которого я не помню).
PInvoke также бросает MissingMethodException
на мобильных устройствах, когда процесс из памяти: http://www.tomergabel.com/NETCompactFrameworkPInvokeAndMissingMethodException.aspx
также:
DllNotFoundException
BadImageFormatException
(DLL является неправильный формат или поврежден)MethodAccessException
(Попытка защищенного прозрачного метода вызвать собственный код)