我在寫一個包含USB設備驅動程序的類庫。 該設備有自己的類庫,由硬件供應商提供。處理包含設備驅動程序的類庫中的異常
很多時候,特別是如果你有舊的DLL或COM組件的處理,有返回TRUE,如果一切都OK,或FALSE如果有錯誤發生的方法(函數是正確的)。 通常這些方法在其中一個參數中返回有關錯誤的信息,或者分別在GetLastError方法或OnError事件中返回有關錯誤的信息。
現在,通常我在處理我的課libray所有本地.NET異常處理本地或重新投擲到客戶端如果錯誤是需要了解的。但如何處理供應商方法中隱藏的所有其他錯誤? (真的,我沒有例外,但只返回TRUE或FALSE值)。
讓我們以連接客戶端到USB設備的方法「CONNECT」爲例。
1包膜這樣的方法:
Public Sub Connect()
oVendorDevice.connect()
End Sub
現在如果有任何連接錯誤發生時,供應商的連接方法返回FALSE。 但我不知道連接失敗的原因。要知道連接失敗的原因,我必須調用(例如)GetLastError方法,該方法向我提供關於錯誤的信息。 (但別忘了其他廠商使用其他策略,例如在方法參數或OnError事件中返回錯誤。現在,爲了遵循一個好的.NET異常處理策略,我可以這樣寫:
Public Sub Connect()
Dim res As Boolean = oVendorDevice.connect()
If res = False Then
Dim sError As String = oVendorDevice.GetLastError
Throw New Exception(sError) 'or a my own exception class
End If
End Sub
但是,我也可以用一些保護供應商的戰略就像
Public Function Connect2(ByRef Err As String) As Boolean
Connect2 = oVendorDevice.connect()
Err = oVendorDevice.GetLastError
End Function
或類似這樣的
Public Function Connect3() As Boolean
Connect3 = oVendorDevice.connect()
MyGetLastError = oVendorDevice.GetLastError
End Function
什麼是最好的.NET方式來「包裝供應商類庫的錯誤」?
謝謝你的回覆。 你將如何處理導致OnError事件的錯誤?你會在你的課堂中生成一個新事件還是拋出異常? – gingo
如果我認爲它應該保證一個,我會舉一個例外,但我可能不會依賴於上下文。 –
mhh ...我會針對OnError情況發佈一個單獨的問題,因爲在評論框中存在一些無法在此處展開的特定問題。 – gingo