code: public <T extends Com4jObject> T object( final Class<T> type ) {
          // native method invocation changeType needs to happen in the COM thread, that is responsible for this variant
          // @see ComCollection#fetch
          ComThread t = thread != null ? thread : ComThread.get();
          return t.execute(new Task<T>() {
              public T call() {
                  Com4jObject wrapper = convertTo(Com4jObject.class);
                  if(null == wrapper) {
                  	return null;
                  }
                  
                  T ret = wrapper.queryInterface(type);
                  wrapper.dispose();
                  return ret;
              }
          });
      }
docs: Reads this VARIANT as a COM interface pointer.
  @param <T> The type of the return value
  @param type The class object of the type
  @return The {@link Com4jObject} of the IUnknown interface pointer that this Variant represents.