anchor.diff:  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))
  -  else
  +  end else
       raise Exception.Create(SValueNotArray);
   end;
   
  
positive.code:     raise EConvertError.CreateFmt(SConvertError, [DValueTypeName[DataType],
        DValueTypeName[vdtArray]]);
  
    lvObj := DValueGetAsObject(GetDValueItem(@FRawValue, pvIndex));
    Result := TDValueItem(lvObj);
  end;
  
negative.code:   SValueNotArray = 'ǰֵͣ޷鷽ʽʡ';
    SConvertError = '޷ %s תΪ %s ͵ֵ';
    SUnsupportStreamSource = '޷ Variant תΪ';
    SOutOfBound   = '[%d]Χ(0..%d)';
  
    SItemNotFound = 'ҲӦĿ:%s';
    SItemExists   = 'Ŀ[%s]Ѿ,ظ.';
  