If you're actually using COM and programming interfaces, this is a sample of what it could look like within the .idl file:
[helpstring("method GetValue"

] HRESULT GetValue([in] int iIndex, [in, out] LPSTR* psValueA, [in, out] LPSTR* psValueB);
Here we're calling GetValue(), passing "in" (only) the index, passing "in" two char pointers and receiving those same two char pointer variables "out". COM requires you to create and pass "in" the addresses of those two string pointer variables, so it can fill those variables and pass them back "out". That's why they are defined as [in, out] variables.
So, when you first set up the variables, make sure to define them as [in, out] if you want to return one or more character strings from a COM object.
Does this help you understand?
BTW:
This example assumes that the project is a C++ client calling a C++ COM object. Otherwise, you'll likely have to use BSTR and/or SAFEARRAY variables to communicate between VB and C++.