什么异常使用PInvoke时可能发生,或者是所有错误都由方法返回值处理,并且由开发人员在需要时检查并引发异常?.NET PInvoke异常处理
8
A
回答
9
使用P/Invoke可以安全地说有两种错误需要处理。
- P/Invoke本身引发的异常。通过DLL的返回
- 错误要调用/
随着1组有一对夫妇可能发生异常(不是最终名单):
- EntryPointNotFoundException
- ExecutionEngineException
- MissingMethodException
- NotSupportedException
对于第2组,您需要检查P/Invoked方法/函数调用的返回结果并采取适当的行动。 Marshal.GetLastWin32Error()在这里派上用场。
这就是为什么总是最好为您需要使用的任何本地材料创建包装类。通过这种方式,您可以将返回结果转换为异常,并将托管代码和本机代码分开。
4
我不知道是否有可以抛出的异常的一个明确的清单,但我知道至少有以下可能会出现
- AccessViolationException
- StackOverflowException
- 异常时,DLL命名未找到。不记得了我的头
- OutOfMemoryException异常
的最上面的这些异常类型都是不特定的PInvoke,并可以在程序中的任何一点发生的类型。唯一特定于PInvoke调用的是未发现的DLL异常(谁是我不记得的类型)。
1
的PInvoke也会引发在移动设备上一个MissingMethodException
,当处理是出的存储器:http://www.tomergabel.com/NETCompactFrameworkPInvokeAndMissingMethodException.aspx
3
另外:
DllNotFoundException
BadImageFormatException
(DLL是错误的格式或损坏)MethodAccessException
(尝试通过安全透明方法调用本机代码)
相关问题
- 1. 异常处理
- 2. 处理异常
- 3. 异常处理
- 4. 在.net 4.0上处理任务异常
- 5. .NET中的全局异常处理?
- 6. WCF Rest .NET 4.0未处理的异常
- 7. 使用.Net HtmlTextWriter安全/处理异常?
- 8. 查找未处理的异常 - .NET
- 9. 默认的.NET异常处理程序
- 10. .NET异常从表中查找处理
- 11. 禁用.NET本机异常处理
- 12. 如何处理异常在.NET
- 13. 关于.NET中的异常处理
- 14. 异常处理
- 15. 异常处理
- 16. 异常处理
- 17. 异常处理
- 18. 处理异常
- 19. 异常处理
- 20. 异常处理
- 21. 异常处理
- 22. 异常处理?
- 23. 异常处理
- 24. 异常处理
- 25. 异常处理
- 26. 异常处理
- 27. .NET 1.1中的未处理的异常处理程序
- 28. 在.net远程处理对象中处理异常
- 29. .NET远程处理异常没有处理客户端
- 30. Android的异常处理