我有一系列相互联系的问题。我想独立地知道所有答案,所以*是*,其中一些似乎是X-Y问题;但是我还是想知道他们的解决方案!请参见问题末尾,以获取该集合中其他问题的列表。
我有一种情况,调用Marshal.GetExceptionForHR(code, pointers)
会抛出AccessViolationException
。
显然,这是VeryBadThing。太糟糕了,try...catch
只是对我耸了耸肩,徘徊在某处……我不知道这是一件事情:(
假定“打电话给.GetExceptionForHR()
是我想做的事”的前提(请参阅其他问题以讨论这是否是一个好主意!)。
进一步假设在某些情况下,不可避免的会导致AccessViolation
。
考虑到这些前提,有什么方法可以预先预测调用它们的方法会爆炸吗?相当于TryGetExceptionForHR()
的某些东西将返回false
,而不是炸毁我的整个程序。
仅查看Microsoft文档,Marshall.GetExceptionForHR
不会抛出可以捕获的异常。
相反,他们建议使用Marshall.ThrowExceptionForHR
获取引发的异常,然后可以处理该异常。使用success HResult。
如果要使用Marshall.GetExceptionForHR
,请再次检查是否使用了正确的指针。 IntPtr(0)
将使用当前的IErrorInfo接口,而IntPtr(-1)
将尝试仅从代码中重构异常。
[还有可能不是抛出意外异常,GetExceptionForHR
只是从catch块返回意外异常,例如:
catch(Exception ex)
{
return ex;
};
[遗憾的是,我目前无法100%确定,我试图在Microsoft的Github上跟踪Marshall类,并且我将进行一些自己的尝试,看能否获得与您自己相同的效果。
相关链接: