Just posting a followup... Turns out I found a way to make it work! (I have been fighting this for almost 3 days!).
If you look at the variable declarations of my procedure.....
Sub GPIB(ByVal Addr As Object, ByRef Data As Object, ByVal IO As String)
Dim ioMgr As Ivi.Visa.Interop.ResourceManager
Dim instrument As Ivi.Visa.Interop.FormattedIO488
Dim session As Ivi.Visa.Interop.IMessage
I use the "IMessage" interface for the variable session.
Just before the "Sub End" is executed I use the following line to close the session :
session.Close
Which it would appear doesn't close the session properly when you use the "IMessage" interface.
So I changed the line to use the "IVisaSession" interface instead :
Dim session As Ivi.Visa.Interop.IVisaSession
Now when the Close method is executed aparently it closes the session properly because my program isn't crashing at all!
I was using VISA COM 3.0 Reference object (GlobMgr.dll).
If anyone has any insight on this please do share.