anchor.diff:        Obj := TObject(P^.VPointer) as AClass;
         Result := Assigned(Obj) or not Assigned(P^.VPointer);
       end
  -    else if P^.VType <> varNull then
  +    else if (P^.VType <> varNull) and (P^.VType <> varEmpty) then
         Result := False;
     except
       Result := False;
  
positive.code: end;
  
  function VarIsIntf(const Value: Variant): Boolean;
  begin
    Result := (FindVarData(Value)^.VType = varUnknown);
  end;
  
  function VarIsIntf(const Value: Variant; const IID: TGUID): Boolean;
  begin
    Result := (FindVarData(Value)^.VType = varUnknown) and
              Supports(IInterface(Value), IID);
  end;
  
  function VarToIntf(const Value: Variant; const IID: TGUID; out AIntf): Boolean;
  begin
    if FindVarData(Value)^.VType = varUnknown then
      Result := Supports(IInterface(Value), IID, AIntf)
    else
      Result := false;
  
negative.code:       Result := TObject(P^.VPointer);
        if not (Result is AClass) then Error(reInvalidCast);
      end
      else if (P^.VType <> varNull) and (P^.VType <> varEmpty) then
        Error(reInvalidCast);
    except
      Error(reInvalidCast);
    end;
  