anchor.diff:        throw Exception('Pointer type missing for $typeIdentifier.');
       }
       final typeArg = TypeProjection(typeIdentifier.typeArg!);
  +    // Strip leading underscores (unless the type is nested, in which
  +    // case leave one behind).
  +    final typeArgNativeType = typeIdentifier.typeArg?.type?.isNested == true
  +        ? '_${stripLeadingUnderscores(typeArg.projection.nativeType)}'
  +        : stripLeadingUnderscores(typeArg.projection.nativeType);
   
       // Pointer<Void> in Dart is unnecessarily restrictive, versus the
       // Win32 meaning, which is more like "undefined type". We can
  
positive.code:       return const TypeTuple('Pointer', 'Pointer');
      }
  
      final nativeType = 'Pointer<${projection.nativeType}>';
      final dartType = 'Pointer<${projection.nativeType}>';
  
      return TypeTuple(nativeType, dartType);
    }
  
negative.code:       return unwrapCallbackType();
      }
  
      if (isInterface ||
          typeIdentifier.baseType == BaseType.ClassTypeModifier ||
          typeIdentifier.baseType == BaseType.Object) {
        return const TypeTuple('Pointer<COMObject>', 'Pointer<COMObject>');
      }
  
  