WARNING #2080

    1% was upgraded to 2% and has a new behavior.

    Description

    The Visual Basic Upgrade Companion converts VB6 library items (types and members) to .NET equivalents whenever possible.  For some VB6 elements there are .NET constructs that work in a very similar way but may differ in their behavior depending on how they are used. The VBUC generates the EWI 2080 for these scenarios.

    During the upgrade process, some class members can be mapped to .NET structures with minor behavior differences. If this EWI is displayed in a given project, the selected target structure will keep the functional equivalence of the resulting code but may end up having small differences in some cases that may require some manual fine tuning, such as methods that are called in a different order or text that is displayed in a different font.

    Recommendations

    • Evaluate whether the specific differences might be present on the specific code being upgraded.  Sometimes these potential differences won't affect the application depending on how the original VB6 element was used.
    • Apply some modification to the upgraded source code which references the conflictive elements so that the differences are resolved.
    • Implement a new element in .NET that doesn’t show the conflictive behavior differences.  This might be done from scratch or by taking advantage of the existing .NET elements by using extension or wrapping approaches.
    • If a different element will be used instead of the one being generated by VBUC, the Custom Mappings Feature could be used to override the preexisting conversion.

    Source VB6

    Public Function Exists(col As Collection, Index As String) As Boolean
    Dim o As Variant
    On Error GoTo Error
       MsgBox o
    Error:
       Exists = o <> Empty
    End Function
    

    Target VB.NET

    Public Function Exists(ByVal col As OrderedDictionary, ByVal Index As String) As Boolean 
       Dim o As Object
    	Try
    		MessageBox.Show(ReflectionHelper.GetPrimitiveValue(Of String)(o), My.Application.Info.Title)
    	Catch
    	End Try
    	'UPGRADE_WARNING: (2080) IsEmpty was upgraded to a comparison and has a new behavior.
    	Return Not Object.Equals(o, Nothing)
    End Function
    

    Target C#

    internal static bool Exists(OrderedDictionary col, string Index)
    {
    	object o = null;
    	try
    	{
    		MessageBox.Show(ReflectionHelper.GetPrimitiveValue<string>(o), AssemblyHelper.GetTitle(System.Reflection.Assembly.GetExecutingAssembly()));
    	}
    	catch
    	{
    	}
    	//UPGRADE_WARNING: (2080) IsEmpty was upgraded to a comparison and has a new behavior.
    	return !Object.Equals(o, null);
    }
    

    See another example for VB6 SavePicture command

    See another example for VB6 Form_Load event


    Download VBUC Free Trial
    Download VBUC Now

    It's time to eradicate VB6
    ROI of eradicating VB6

    8 Proven Tips for
    Planning a Successful Migration

    Learn More