anchor.diff:    Result := not Assigned(V.VPointer);
   end;
   
  +{$IFDEF DELPHI7_UP}
  +var
  +  OldVarDispProc: TVarDispProc;
  +
  +procedure IntfDispInvoke(Dest: PVariant; const Source: Variant;
  +      CallDesc: PCallDesc; Params: Pointer); cdecl;
  +begin
  +  if TVarData(Source).VType=varUnknown then
  +    VarObjectType.DispInvoke(PVarData(Dest), TVarData(Source), CallDesc, Params)
  +  else if Assigned(OldVarDispProc) then
  +    OldVarDispProc(Dest, Source, CallDesc, Params)
  +  else
  +    raise exception.Create('Variant method calls not supported');
  +end;
  +{$ENDIF}
  +
   function ListSplit(ListClass: TListClass; Str: string;
     const Separator: string; Limit: Integer; TrimItem: Boolean;
     SkipEmptyItem: Boolean): IList;
  
positive.code: function GetClassByInterface(const IID: TGUID): TInterfacedClass;
  function HasRegisterWithInterface(const AClass: TInterfacedClass): Boolean;
  function GetInterfaceByClass(const AClass: TInterfacedClass): TGUID;
  
  type
    TClassManager = class
  
negative.code:     function Delete(Index: Integer): Variant; override;
      procedure DeleteRange(Index, ACount: Integer); override;
      procedure Exchange(Index1, Index2: Integer); override;
      procedure Put(Index: Integer; const Value: Variant); override;
      function IndexOf(const Value: Variant): Integer; override;
      function LastIndexOf(const Value: Variant): Integer; override;
      procedure Insert(Index: Integer; const Value: Variant); override;
  