0

メソッドの実行失敗時にスローされていた独自の例外があります(私の場合は p/invoke )。

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

しかし、私はそれを既存のものに置き換えたいと思っています。FCLにそのようなものはありますか?

4

4 に答える 4

1

1つあります: Win32Exception

例外をスローしているメソッドが .Net メソッドである場合、カスタム例外 (または何が起こったかに応じて既存の例外) を使用する必要があります。

メソッドを呼び出している人の代わりにメソッドを呼び出す場合 (またはリフレクションと関係がありますが、MethodInfo.Invoke はとにかくそれを行います)、たとえば:

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

TargetInvocationException例外を使用する必要があります。

例外を処理できない場合は、再スローするか無視してください。

于 2009-03-09T11:27:11.107 に答える
1

どうSystem.Runtime.InteropServices.ExternalExceptionですか?

于 2009-03-13T12:13:54.957 に答える
1

BCL には、PInvoke 呼び出し専用のものはありません。最も近いものは、Marshal.GetExceptionForHR と Marshal.GetHRForLastWin32Error です。これら 2 つの関数を組み合わせて使用​​すると、PInvoke 呼び出しが失敗するたびに適切な例外をスローできます。

元:

throw Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error());
于 2009-03-06T12:31:45.173 に答える