С помощью P / Invoke можно с уверенностью сказать, что есть два типа ошибок, которые вам нужно устранить.
- Исключения, создаваемые самой P / Invoke.
- Ошибки, возвращаемые dll, которые вы вызываете /
С группой 1 может произойти пара исключений (не полный список):
- EntryPointNotFoundException
- ExecutionEngineException
- MissingMethodException
- NotSupportedException
В группе 2 вам необходимо проверить результат возврата вашего вызова метода / функции P / Invoked и действовать соответствующим образом. Marshal.GetLastWin32Error () пригодится здесь.
Вот почему всегда лучше создавать классы-обертки для любого нативного материала, который вам нужно использовать. Таким образом, вы можете преобразовать результаты возврата в исключения и разделить управляемый и собственный код.