anchor.diff:      raise EConvertError.CreateFmt(SConvertError, [DValueTypeName[DataType],
         DValueTypeName[vdtArray]]);
   
  +
  +
  +
     lvObj := DValueGetAsObject(GetDValueItem(@FRawValue, pvIndex));
     Result := TDValueItem(lvObj);
   end;
  
positive.code:   SValueNotArray = 'ǰֵͣ޷鷽ʽʡ';
    SConvertError = '޷ %s תΪ %s ͵ֵ';
    SUnsupportStreamSource = '޷ Variant תΪ';
  
    SItemNotFound = 'ҲӦĿ:%s';
    SItemExists   = 'Ŀ[%s]Ѿ,ظ.';
  
negative.code: function GetDValueItem(ADValue: PDRawValue; pvIndex: Integer): PDRawValue;
  begin
    if ADValue.ValueType = vdtArray then
    begin
      if (pvIndex < 0) or (pvIndex >= ADValue.Value.ArrayLength) then
      begin
        raise EArgumentOutOfRangeException.CreateFmt(SOutOfBound, [pvIndex, ADValue.Value.ArrayLength - 1]);
      end;
      Result := PDRawValue(IntPtr(ADValue.Value.ArrayItemsEntry) + (SizeOf(TDRawValue) * pvIndex))
    end else
      raise Exception.Create(SValueNotArray);
  end;
  
  