가 FCL 이미 있는 예외를 의미는 방법을 실행이 실패하는가?
문제
나는 내 자신의 예외가되었 던지기에 실행 실패 방법 (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
?