Blog from July, 2020

I happened to notice this article Popularity Index: Classic Visual Basic Hangs In There -- Visual Studio Magazine regarding the ongoing popularity of VB6 in the world of programming. 

It's true: we do get a lot of inquiries, from all sorts of companies, who are still building and running VB6/COM apps. Most of these applications are at least 200K lines of code and a few are over a million LOC.   Despite the increasing risk of depending on VB6, these legacy systems persist as VB6 because they deliver value.  I will add that, in every case, the technical teams that maintain these VB6 applications understand they must get off VB6 sooner or later, but they struggle make the upgrade project a business priority.   In some cases, we find organizations have tried and failed to "just rewrite" their legacy systems ending up with a "partway there system" -- with some .NET around the edges and a big mass of mature VB6 functionality at the center.  The fact is that rewriting large systems requires a generous investment of vision, creativity, experience and resources.

Nevertheless, for the vast majority of these companies, moving their systems from VB6 to something else is a matter of survival.   We believe ambitious upgrade projects require a new paradigm: new tools and methods.  That is what we are building at Great Migrations.  Read through the articles on this portal and Contact us if you want to learn more.


Project Success Story: 17 VBPs, 380K LOC VB6, 33 Custom Upgrade features, 6 months

Great Migrations recently assisted a client in the migration of a large specialty insurance system from VB6 to C#. Our tools and methods dramatically accelerated the client's digital transformation initiative while lowering cost and risk. Learn more from this article and testimonial on the Great Migrations portal.

gmBasic: Upgrade Engine

gmBasic is a code transformation tool that reads, interprets, and rewrites VB6/ASP/COM systems to one of the .NET languages (C# or VB.NET). Based on feedback from our clients and migration projects in the field, we are continuously improving gmBasic so as to help users more easily produce cleaner and more correct results. Most recently, this work included the general improvements needed to produce build-complete C# code for a leading electronic medical records (EMR) product. This EMR system was both large: 1.8M LOC implementing 85,000 methods, contained in 7000 unique code files, organized by 153 inter-related VBPs, and complex: having over 4000 Implements statements, extensive interface inheritance, and heavy use of over 200 external COM/Interop libraries. This distribution, Version 31.12, includes several enhancements:

  • Improves consistency of class members that implement interface members
  • Improves accuracy of resolving and preserving interface inheritance
  • Improves support for recognizing module members qualified by the project name, the module name, or both
  • Improves support for user-defined Font properties
  • Improves GoSub refactoring to make extracted GoSub routines private
  • Improves GoSub refactoring to handle properties containing GoSubs
  • Improves recognizing and migrating abstract Control references
  • Improves migrating indexer expressions involving weakly typed collections
  • Improves migrating code using Abs in bitwise operations
  • Improves setting scope of user-defined types
  • Improves resolving naming conflicts between enums and classes
  • Improves support for migrating properties where the getter's return type differs from the setter's value type
  • Improves migrating passing a unary operation by ref
  • Improves migration of Select-Case using LCase/UCase(literal) expressions as Case arguments to switch-case (C#)
  • Improves migration of Select-Case using a type Single expression as the Select argument
  • Improves Refactor/Migrate command to allow modifying the uuid associated with a designer coclass
  • Improves low level handling of code using extended character sets
  • Improves support for ComboBox/ListBox NewIndex Property
  • Improves resolving object versus default property on LHS of an assignment
  • Improves detecting and migrating event handlers for ControlArrays that do not follow standard conventions
  • Begins major improvements to late-stage type inference for symbols of type Object in code and COM interfaces

gmStudio: Upgrade Solution Development Environment

Powered by gmBasic, gmStudio is a development environment for analyzing code and developing custom VB6/ASP/COM to .NET upgrade solutions. We are continuously adding functionality to gmStudio and making it easier to use. This distribution includes several enhancements:

  • Improves Visual Studio Solution File generation
  • Improves Translation Search Results by reporting the member that contains each match (C# only)
  • Improves .NET Build Log Report by reporting the member that contains a given error (C# only)
  • Improves order of fields in .NET Build Log report
  • Adds Compare IDF Files operation from References context menu
  • Adds Compare Source Files operation from Source Metrics context menu
  • Adds Open File Location operation from References context menu
  • Adds Open File Location operation from Source Metrics context menu
  • Improves IDL Author to warn when a hidden class is skipped

gmslAPI: a .NET API for Developing Advanced Upgrade Solutions

Powered by gmBasic, gmslAPI is a .NET API for automating our upgrade engine and accessing the semantic models produced by our unique linguistic compilation technology. gmslAPI also includes classes for managing complex upgrade rules and integrating with gmStudio. This API was updated to reflect the latest product improvements and conventions.

Sample Upgrade Rules

gmStudio ships with a collection of sample upgrade rules that can be used to add custom features to your upgrade solution. These XML documents and gmSL scripts are distributed as source that you may modify to fit your unique requirements. The sample rules were updated to reflect the latest product improvements and conventions. See also additions and changes in gmStudio Extensions Repository.

  • Refactor.Mscomctl.ocx.xml: Improves MSComCtlLib.ListView.SubItems migration

Sample Upgrade Solutions

Great Migrations publishes a number of sample VB6/ASP upgrade solutions to illustrate the capabilities of gmStudio. The sample upgrade solutions were updated to reflect the latest product improvements and conventions.

  • Improves MSComCtlLib.ListView.SubItems migration in FileExplorer sample
  • Improves Handling of Select Case in FMStocks