VB Migration Partner

KNOWLEDGE BASE - Language


Previous | Index | Next 

[HOWTO] Convert byte-oriented string functions

VB.NET doesn’t support byte-oriented string functions, such as LeftB, RightB, and MidB. VB Migration Partner converts these methods into calls to the special LeftB6, RightB6, and MidB6 methods, defined the support library. These replacement methods mimic their VB6 counterparts, but in most cases they fail to perfectly reproduce the original VB6 behavior. For this reason, the methods in the support library are marked as obsolete and generate both a migration message and a compiler warning.

To help users that work with non-Latin alphabets, starting with 1.11 version, the support library exposes the following helper methods that approximate the VB6 behavior a bit better: EncodeStr6, EncodeLeftB6, EncodeRightB6, EncodeMidB6 and EncodeInputB6

        Dim s As String
        s = EncodeLeftB6("abcde", 5)

The new methods solve one of the problems inherent to the standard XxxxB6 function by supporting an additional, optional Boolean parameter. If this parameter is passed True, then the method returns a Byte array rather than a string:

        Dim bytes() As Byte
        s = EncodeLeftB6("abcde", 5, True)

You can easily replace all the occurrences of standard XxxxB6 methods into the new EncodeXxxxB6 methods by means of a PostProcess pragma in the original VB6 code:

        '## project:PostProcess "\b(Left|Right|Mid|Input)B6\(", "Encode$0", True
        '## project:PostProcess "\bStrConv6\(", "EncodeStr6("

The pragmas are different if you are converting to C#:

'## project:PostProcess "\bVB6Helpers.(?Left|Right|Mid|Input)B\(", 
"VB6Helpers.Encode${fn}B(", True
        '## project:PostProcess "\bVB6Helpers.StrConv\(", "VB6Helpers.EncodeStr("

If you have used the new EncodeXxxx methods in your VB6 code, you don’t need an explicit conversion from String to Byte array any longer, therefore you can drop occurrences of the StringToByteArray6 method and append True at the end of the argument list. The following pragma can do that automatically:

        '## PostProcess "\bStringToByteArray6\((?<instruction>Encode(LeftB6|RightB6|MidB6|InputB6)
           \(.+?)\)\)", "${instruction}, True)", True, False

(Note that previous pragma fails if the EncodeXxxx6 method has one or more parameters that contain parenthesis.) Here’s the version needed when converting to C#

'## PostProcess 
"\bVB6Helpers.StringToByteArray\((?VB6Helpers.Encode(LeftB|RightB|MidB|InputB)\(.+?)\)\)" , 
"${instruction}, true)", True, False

The new methods are defined also in the VisualBasic6_Support.bas module, therefore you can take a more granular decision about which byte-oriented methods are converted and use the new functionality.

Finally, a disclaimer is in order. Even with these improvements, the new methods can’t guaranteed that VB6 functionality is perfectly replicated; however they are an important step in the right direction.

Previous | Index | Next 




Follow Francesco Balena on VB6 migration’s group on

LinkedIn





Read Microsoft Corp’s official case study of a VB6 conversion using VB Migration Partner.




Code Architects and its partners offers remote and onsite migration services.

More details




Subscribe to our free newsletter for useful VB6 migration tips and techniques.

newsletter



To learn more about your VB6 applications, run VB6 Analyzer on your source code and send us the generated text file. You will receive a detailed report about your VB6 applications and how VB Migration Partner can help you to quickly and effectively migrate it to .NET.

Get free advice



A fully-working, time-limited Trial Edition of VB Migration Partner allows you to test it against your actual code

Get the Trial




The price of VB Migration Partner depends on the size of the VB6 application, the type of license, and other factors

Request a quote




Migrating a VB6 application in 10 easy steps

Comparing VB Migration Partner with Upgrade Wizard

Migration tools: Feature Comparison Table

All whitepapers