2014-09-03 15 views
1

將onError/GoTo語句從VB6轉換爲VB.Net時,我被告知使用try/catch語句。大多數VB6錯誤塊使用Microsoft.VisualBasic.ErrObject提供錯誤代碼和說明。例如:VB ErrorObject與try/catch塊一起工作還是僅onError/GoTo?

CombinePDF_ERROR: 
     lErrorCode = Err 
     strErrorSource = Err.Source 
     strErrorDescription = Err.Description 
     bInProcess = False 
     strCombinePDFLastFile1 = strFile1 
     strCombinePDFLastFile2 = strFile2 
     ChDrive left$(strCurrentDir, 1) 
     ChDir strCurrentDir 
     Call CombinePDFUIUnload 
     Err.Raise lErrorCode, strErrorSource, strErrorDescription 
End Sub 

是否ERR(Microsoft.VisualBasic.ErrObject)獲得來自的onError/goto語句的信息?在此之前,沒有給出lErrorCode,strErrorSource,strErrorDescription。如何在try/catch中複製這個功能?捕獲異常和messageBox的消息?第一次使用VB6或VB.Net。感謝您的時間。

+0

我們無法看到可能導致錯誤的代碼,使其非常廣泛。 [這些人](http://msdn.microsoft.com/en-us/library/fk6t46tz.aspx)瞭解了很多關於Try/Catch,從那裏開始 – Plutonix 2014-09-03 15:36:37

+0

VB'Err'對象和pre.NET錯誤處理以'On Error'或'Resume'開頭的語句生活在與結構化異常處理不兼容的小世界中(VB甚至不會讓你在同一個方法中包含這兩種類型)。避免傳統的VB錯誤處理,並重新構建您需要的結構化異常處理。 – 2014-09-03 16:23:37

+0

[Microsoft.VisualBasic.ErrObject'的源代碼](http://referencesource.microsoft.com/#Microsoft.VisualBasic/ErrObject.vb)給出了翻譯的一些線索,以及異常如何映射到「經典」VB錯誤。 – Deanna 2014-09-04 08:30:50

回答

1

問題中的特定代碼基本上就像下面這個Catch塊一樣。 Err.Raise相當於一個Throw,而Err對象大致等同於一個Exception對象。

Catch ex 
    bInProcess = False 
    strCombinePDFLastFile1 = strFile1 
    strCombinePDFLastFile2 = strFile2 
    ChDrive left$(strCurrentDir, 1) 
    ChDir strCurrentDir 
    Call CombinePDFUIUnload 
Throw ex 

但這就是這一塊。您需要檢查每個VB6錯誤處理程序,確定它的功能,並使用Try Catch制定最接近的對等項。您需要了解VB6 On Error和Err對象,以及.Net Try ... Catch和Exception對象。

如果你不知道VB6或VB.Net,你將會對這個項目感到非常難過。

相關問題