Friend subs apparently let you pass around Types in Visual Basic. What a freakin' mess for something that seems pretty straightforward. I've bumped into this before, and suppose I'll probably forget again.

At any rate, it's silly to replace logic that falls into a function that should return three or four values with a subroutine that acts on the parameters you send in. So people are writing subs like...

Public Sub returnSomeVals(ByRef strRet1 as String, ByRef strRet2 as String, ByRef lRet3 as Long)

... instead of...

Public Function returnSomeVals() as twoStringOneLongType

Oh well.

This usenet post explains in a little more detail.