VB to .NET

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

 

Talk To An Engineer