No, you last assumption might be the right one.
The have been 2 overloads for the BASS_Init call (now 3).
These are:
public static extern bool BASS_Init(int device, int freq, BASSInit flags, IntPtr win, Guid clsid);
and
public static extern bool BASS_Init(int device, int freq, BASSInit flags, IntPtr win, object clsid);
I guess all boils down to the fact, that VB is not fully type safe.
E.g. you can make the following assignment without any compiler error etc.:
Dim x As Int64 = 3
Dim y As IntPtr
y = x
So using the 'Nothing' keyword with BASS_Init might result in actually calling the 'wrong' overload.
Meaning the overload which expects the 'Guid' datatype.
And as you referred for a datatype - it's assigning it a strange default value.
For all other .Net languages the compiler would pick the correct overload, as any NULL keyword would pick the 'object' overload and NOT the 'Guid' overload, since a Guid is a struct and not a reference type.
I guess now I even more understand why I like C# more than VB ;-)
(beside all the other huge advantages when it comes to audio processing, e.g. C# can deal with unsafe pointer operations etc.)
However, I introduced a new, 3rd BASS_Init overload to overcome the VB.Net short commings:
public static extern bool BASS_Init(int device, int freq, BASSInit flags, IntPtr win, IntPtr clsid);
With this one even VB doesn't have a chance to pick the 'wrong' one.