anchor.diff:      // IReference<T> parameters accept COMObject instead of Pointer<COMObject>
       if (isGenericType &&
           (typeIdentifier.type?.name.endsWith('IReference`1') ?? false)) {
  -      return const TypeTuple('COMObject', 'COMObject');
  +      return TypeTuple('COMObject', 'COMObject',
  +          methodParamType: lastComponent(typeIdentifier.name));
       }
   
       if (isInterface ||
           typeIdentifier.baseType == BaseType.classTypeModifier ||
           typeIdentifier.baseType == BaseType.objectType) {
  -      return const TypeTuple('Pointer<COMObject>', 'Pointer<COMObject>');
  +      return TypeTuple(
  +        'Pointer<COMObject>',
  +        'Pointer<COMObject>',
  +        methodParamType: typeIdentifier.baseType == BaseType.objectType
  +            ? null
  +            : lastComponent(typeIdentifier.name),
  +      );
       }
   
       // default: return the name as returned by metadata
  
positive.code:   }
  
    TypeTuple unwrapWinRTDelegate() {
      final delegateName = stripGenerics(
          stripLeadingUnderscores(lastComponent(typeIdentifier.name)));
  
      return TypeTuple('Pointer<NativeFunction<$delegateName>>',
          'Pointer<NativeFunction<$delegateName>>');
  
negative.code:     return _projection!;
    }
  
    TypeProjection(TypeIdentifier ti)
        : typeIdentifier = ti.baseType == BaseType.genericTypeModifier
              ? ti.copyWith(name: parseGenericTypeIdentifierName(ti))
              : ti;
  
    String get attribute => projection.attribute ?? '';
    String get nativeType => projection.nativeType;
  