COM Automation objects
Apart from scalar types (structures and arrays) the only other objects that can be used as parameters of the interface methods, are the pointers to other interfaces.
This is the only way to access code running in different address spaces because the pointers to C++ classes or pointers to functions are off limits to remote method calls.
The pointers to these objects are stored in the global object pool, and are accessed through the references to them.
The Type Library Importer creates a single item in the type tree for each object used as an input/output/inout parameter, and that item contains a reference to the object pool for a given object. That reference is used on the COM Automation adapter side to access the object methods and members, using the global object pool.