[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
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.