有一种方法可以预测`Marshal.GetExceptionForHR(代码,指针)`会抛出一个AccessViolationException`

问题描述 投票:5回答:1

我有一系列相互联系的问题。我想独立地知道所有答案,所以*是*,其中一些似乎是X-Y问题;但是我还是想知道他们的解决方案!请参见问题末尾,以获取该集合中其他问题的列表。


我有一种情况,调用Marshal.GetExceptionForHR(code, pointers)会抛出AccessViolationException

显然,这是VeryBadThing。太糟糕了,try...catch只是对我耸了耸肩,徘徊在某处……我不知道这是一件事情:(

假定“打电话给.GetExceptionForHR()是我想做的事”的前提(请参阅其他问题以讨论这是否是一个好主意!)。

进一步假设在某些情况下,不可避免的会导致AccessViolation

考虑到这些前提,有什么方法可以预先预测调用它们的方法会爆炸吗?相当于TryGetExceptionForHR()的某些东西将返回false,而不是炸毁我的整个程序。


此问题集中的其他问题。
c# exception marshalling access-violation
1个回答
0
投票

仅查看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类,并且我将进行一些自己的尝试,看能否获得与您自己相同的效果。

相关链接:

© www.soinside.com 2019 - 2024. All rights reserved.