什麼異常使用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. 處理.net中的異常
- 2. .NET未處理的異常
- 3. 異常處理
- 4. 處理異常
- 5. 異常處理
- 6. 異常處理:多次處理異常
- 7. php異常處理異常
- 8. 查找未處理的異常 - .NET
- 9. C#和ASP中的異常處理.Net
- 10. 如何處理異常在.NET
- 11. 使用.Net HtmlTextWriter安全/處理異常?
- 12. .NET異常從表中查找處理
- 13. .NET未處理的異常從母版
- 14. 禁用.NET本機異常處理
- 15. 在.net 4.0上處理任務異常
- 16. .NET中的全局異常處理?
- 17. WCF Rest .NET 4.0未處理的異常
- 18. 默認的.NET異常處理程序
- 19. Microsoft .NET Framework未處理異常
- 20. 關於.NET中的異常處理
- 21. 異常處理
- 22. 異常處理
- 23. 異常處理
- 24. 處理異常
- 25. 異常處理
- 26. 處理異常
- 27. 異常處理
- 28. 處理異常
- 29. 異常處理
- 30. 處理異常