문제

나는 내 자신의 예외가되었 던지기에 실행 실패 방법 (p/invoke 내 경우).

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

그러나 나는 그것을 대체하는 이미 기존.은 거기에서 나는 뭔가?

도움이 되었습니까?

해결책

발신자가 PinvokeException과 InvalidoperationException을 던지는 지 여부에 따라 다른 조치를 취할 것입니까? 그렇다면 사용자 정의 pinvokeException을 만듭니다. 그렇지 않으면 InvalidOperationException과 명확한 오류 메시지를 사용하십시오.

보다 예외 계층을 설계하는 방법.

다른 팁

BCL에서 Pinvoke Call에 전념하는 것은 없습니다. 가장 가까운 것은 Marshal.getexceptionforhr 및 Marshal.gethrforlastwin32error입니다. 이 두 기능의 조합을 사용하여 Pinvoke 호출이 실패 할 때마다 적절한 예외를 던질 수 있습니다.

전:

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

거기에 하나: Win32Exception.

는 경우는 방법 당신이 던지기에서 예외입니다.Net 방법 를 사용하여 사용자 지정 예외(거나 기존,무슨 일이 있었는지에 따라).

는 경우 메소드를 호출하는 사람을 대신하여 통화의 방법(또는 뭔가를 반영한-그러나 MethodInfo.를 호출하는 어쨌든 그것),예를 들어:

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

을 사용해야 합니다 예외는 아니다.

할 수 없는 경우에는 예외를 처리를 다시 발생시키거나 그것을 무시합니다.

어때 System.Runtime.InteropServices.ExternalException?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top