我有自己的异常,它一直在抛出方法的执行失败(在我的情况下是p / invoke)。

public PInvokeException(string methodName)
: base(String.Format(CultureInfo.CurrentCulture,
"An error occured while external method '{0}' call",
methodName)) { }

但我想用现有的替换它。 FCL中有类似的东西吗?

有帮助吗?

解决方案

根据您是否抛出PInvokeException与InvalidOperationException,您的调用者是否会采取不同的操作?如果是,则创建自定义PInvokeException。否则使用InvalidOperationException和清除错误消息。

请参阅如何设计例外层次结构

其他提示

在BCL中没有专门用于PInvoke调用的内容。存在的最接近的是Marshal.GetExceptionForHR和Marshal.GetHRForLastWin32Error。每当PInvoke调用失败时,您都可以使用这两个函数的组合来抛出相应的异常。

例如:

throw Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error());

有一个: Win32Exception

如果您抛出异常的方法是.Net方法,那么使用自定义异常(或现有异常,具体取决于发生的情况)。

如果你代表调用你方法的人调用一个方法(或者用反射做某事 - 但是MethodInfo.Invoke无论如何都要这样做),例如:

public void DoIt(Action action) { action(); }

您应该使用 TargetInvocationException 例外。

如果您无法处理异常,请重新抛出或忽略它。

System.Runtime.InteropServices.ExternalException 怎么样?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top