I have found named pipes to be very useful in this circumstance. I confess I've done far more C++ than Vb code, however. Using a blocked-read thread on each end of the pipe is a very simple model which allows you to hang on a read until data arrives or the pipe goes away. You then simple stage the data and fire an event to allow its processing.
You could also use sockets, if you want to do the extra work, since both environments have extensive support in that area.
While COM would strike me as the "best" method (architecturally) of handling your communication requirements, be aware that there are other very simple methods available that work very well. It all depends on how reusable you want the end product to be.