If you pass an object by value to a dispose function the function will dispose a copy of the object so the original object will be untouched.
Dim r as MyObject
Dispose(r) 'if the Dispose method take the argument by value it will create a new MyObject inside it and will dispose the copy.
However, if you pass the parameter ByRef it will be affected by this method.
So if you want to dispose the object you must pass it by reference. There is still one more trick: you can't set it to NULL inside that method because if you pass an object by reference its pointer is passed by value so setting it to NULL will not affect the outside of method object.
In .NET, most of the time, you don't have have to manually dealocate the memory because the GarbageCollector will do that for you