Sometimes, when marshalling a managed object to a variant, it can actually implicitly become VT_DISPATCH rather than VT_UNKNOWN. This happens if the class of the object that is marshalled is ComVisible(true) - which is the default for all public types.