I found that when using the drumbuffer object, it always starts with a size of zero. You have to call setsize and give it some value large enough (no. of bytes) to hold the information you're expecting it to receive.
Then call the function to set the gps port target.
I have a suspicion that you'll only receive callbacks if there is enough room in the drumbuffer to hold any data. Being zero size at creation means you never get called back.
As I remember it you'll receive a stream of data, whereby the data isn't going to be nicely split into lines for you. You'll have to do that yourself by picking up the CR/LF pairs in the data or looking for $ as the start of line.
I've got some Delphi code that does this, but no VB code I'm afraid.