我有一整套相互关联的问题。我想独立地知道所有这些问题的答案,所以*是的*,其中一些似乎是 X-Y 问题;但我确实想知道他们的解决方案!请参阅问题末尾以获取本集中其他问题的列表。
我有一种情况,调用Marshal.GetExceptionForHR(code, pointers)
抛出 AccessViolationException
.
显然这是一个非常糟糕的事情。太糟糕了try...catch
只是对我耸耸肩,然后四处走动……我不知道这是一件事:(
假设“调用 .GetExceptionForHR()
是我想要做的事情”的前提(有关这是否是一个好主意的讨论,请参阅其他问题!)。
进一步假设任何导致 AccessViolation
在某些情况下是不可避免的。
鉴于这些前提,有没有办法提前预测调用它们的方法会爆炸?
相当于 TryGetExceptionForHR()
这将返回 false
而不是炸毁我的整个程序。
此问题集中的其他问题。
最佳答案
只需查看 Microsoft 文档,Marshall.GetExceptionForHR
不会抛出可以被捕获的异常。
相反,他们建议使用 Marshall.ThrowExceptionForHR
得到一个抛出的异常,然后你可以处理。使用 时不会抛出异常成功结果。
如果你想使用 Marshall.GetExceptionForHR
然后仔细检查是否使用了正确的指针。 IntPtr(0)
IntPtr(-1)
时将使用当前的 IErrorInfo 接口(interface)将尝试仅从代码重构异常。GetExceptionForHR
也可能不是抛出意外的异常,而是仅从 catch block 返回意外异常,例如:
catch(Exception ex)
{
return ex;
};
不幸的是,此时我不能 100% 确定,我正在尝试在 Microsoft 的 Github 上追踪 Marshall 类(class),并且我将自己尝试一些尝试,看看我是否能获得与您相同的效果。
相关链接:
关于c# - 有没有办法预测 `Marshal.GetExceptionForHR(code, pointers)` 会抛出 `AccessViolationException`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60424851/