Visual Basic Upgrade Wizard vs 3rd Party Migration Tools

[If you are UK based, check out www.microsoft.com/uk/vbmigration for more information ]

A question I get asked a lot is “Are 3rd party migration tools really that much better than the free upgrade wizard from Microsoft?”

Lets me be perfectly candid. Whilst I always recommend people should try the free wizard first, it has many shortcomings. Too many IMHO. That said, for some folks it will be perfectly “good enough” to enable a successful migration from VB6 to Visual Basic .NET. However for large, complex VB6 applications you would likely be much better served by a 3rd party tool.

The two main companies in this space have each created a comparison with the Upgrade Wizard which I would definitely recommend you check out.

Code Architects VB Migration Partner

Code Architects have a paper which includes a detailed analysis of the output of their VB Migration Partner compared with the Upgrade Wizard on a number of Open SourceVB6 projects and a look at how well each tool handles compatibility issues as identified by VB Project Analyzer from Aivosto. VB Migration Partner was:

  • About four times faster
  • Produced fives times fewer compilation errors in the final .NET code
  • Able to fully or partially handle 43 of the 49 compatibility issues that are left unresolved by the Upgrade Wizard

image

Artinsoft Visual Basic Upgrade Companion

Artinsoft have created a detailed whitepaper looking at the many differences between the Wizard and their Visual Basic Upgrade Companion. They are sometimes very big differences – such as how the tool handles 3rd party controls. The paper also includes lots of great code snippets which allow you to directly compare the two tools.

e.g. Error Handling

Original VB6 Source Code:

 Public Sub ErrorHandling(arg1 As Integer) 
On Error GoTo ErrorHandler 
    Dim var1 As Integer 
    var1 = 1 / arg1 
    MsgBox var1 
    MsgBox arg1 
    Exit Sub 
ErrorHandler: 
    MsgBox Err.Description, , "Error" 
End Sub 

The Upgrade Wizard:

 Public Sub ErrorHandling(ByRef arg1 As Short) 
On Error GoTo ErrorHandler 
  Dim var1 As Short 
  var1 = 1 / arg1 
  MsgBox(var1) 
  MsgBox(arg1) 
  Exit Sub 
ErrorHandler:  
  MsgBox(Err.Description,  , "Error") 
End Sub 

But the Visual Basic Upgrade Companion uses Try/Catch:

 Public Sub ErrorHandling(ByRef arg1 As Integer) 
Try  
  Dim var1 As Integer 
  var1 = 1 / arg1 
  MessageBox.Show(CStr(var1), Application.ProductName) 
  MessageBox.Show(CStr(arg1), Application.ProductName)  
  15 
Catch excep As System.Exception       
  MessageBox.Show(excep.Message, "Error") 
End Try 
End Sub 

Do check out the paper, especially the many code samples.