If the 'Visual Basic' is the VB6 I know, then The difference between VB6 and VB.NET is the way VB6, VB.NET pass the address or memory space of your data when you call an external Function in a DLL. 1) VB.NET obey the rule passed by value (ByVal) and it will copy the entire image of your data and pass the address into your external Function (in a DLL, etc). 2) VB6 does not do that. The proof of this is your Function can manipulate the data (Often a ByVal String) and when the function return, the VB6 can see what was changed with that space. 3) I like this VB6 behaviour for peace sake. Lately, I had a DLL use in VB6 and ported it into VB.NET and It does not work the way I know it, only to find-out I had to create another Function that accept a pointer to String address, (char **) in C/C++, Or create a public structure and put all those String variables that previously use as pass ByVal in VB6 application---lots of work, but that what porting is about---to make your existing codes work on another environment.
TMALBONPH