VB6 Variant vs Byte Array
In Visual Basic 6.0, a Variant containing a byte array is different than a byte array.
For example, examine this code:
' Assume mime is a ChilkatMime object... Set mimePart = mime.GetPart(1) thefile = FreeFile() 'Get the attachment filename FileName = mimePart.FileName 'Get the attachment Dim mBody As Variant mBody = mimePart.GetBodyBinary If Len(mBody) > 0 Then Open FileName For Binary As #thefile Put #thefile, , mBody Close #thefile End If
The result is not what you expected. There’s a mysterious extra 12 bytes prepended to the content that is saved. Why? Because you saved the Variant structure as well as the contents of the Variant.
This is what you really wanted:
' Assume mime is a ChilkatMime object... Set mimePart = mime.GetPart(1) thefile = FreeFile() 'Get the attachment filename FileName = mimePart.FileName 'Get the attachment Dim mBody() As Byte mBody = mimePart.GetBodyBinary If UBound(mBody) > 0 Then Open FileName For Binary As #thefile Put #thefile, , mBody Close #thefile End If
In the above code fragment, mBody is a byte array. There is no Variant structure encapsulating the data. The content of the MIME body is saved exactly as you expected.
Note: There is an implicit conversion happening in this statement:
mBody = mimePart.GetBodyBinary
GetBodyBinary is a function that returns a Variant. However, mBody is declared as an array of Byte. Therefore, the VB6 runtime is converting the Variant to a byte array. In other words, it’s removing the Variant wrapping so-to-speak…