我有自己的异常,它一直在抛出方法的执行失败(在我的例子中是p/invoke)。
public PInvokeException(string methodName)
: base(String.Format(CultureInfo.CurrentCulture,
"An error occured while external method '{0}' call",
methodName)) { }但我想用已经存在的代替它。FCL里有类似的东西吗?
发布于 2009-03-13 12:09:34
您的调用方是否会根据是否抛出PInvokeException和InvalidOperationException而采取不同的操作?如果是这样,那么创建一个自定义PInvokeException。否则,请使用InvalidOperationException和明确的错误消息。
见如何设计异常层次结构。
发布于 2009-03-06 12:31:45
在BCL中没有什么是专门用于PInvoke调用的。最接近的是Marshal.GetExceptionForHR和Marshal.GetHRForLastWin32Error。当PInvoke调用失败时,您可以使用这两个函数的组合抛出适当的异常。
例如:
throw Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error());发布于 2009-03-09 11:27:11
有一个:Win32Exception。
如果要抛出异常的方法是.Net方法,则应该使用自定义异常(或者根据发生的情况,使用现有的异常)。
例如,如果您代表调用您的方法的人调用一个方法(或者与反射有关,但MethodInfo.Invoke无论如何都会这样做):
public void DoIt(Action action) { action(); }您应该使用TargetInvocationException异常。
如果无法处理异常,请重新抛出它,或忽略它。
https://stackoverflow.com/questions/618661
复制相似问题