.NET PInvoke异常处理

Rob*_*ean 9 .net pinvoke exception

使用PInvoke时会发生什么异常,或者方法返回值处理的所有错误都是由开发人员根据需要检查和引发异常?

Par*_*ice 10

使用P/Invoke可以肯定地说,您需要处理两种错误.

  1. P/Invoke本身引发的异常.
  2. 您正在调用的dll返回的错误/

对于组1,可能会发生一些异常(不是最终列表):

  • EntryPointNotFoundException
  • ExecutionEngineException
  • MissingMethodException
  • NotSupportedException异常

对于组2,您需要检查P/Invoked方法/函数调用的返回结果并采取适当的操作.Marshal.GetLastWin32Error()在这里派上用场.

这就是为什么最好为您需要使用的任何本机内容创建包装类.这样,您可以将返回结果转换为异常并分离托管代码和本机代码.