Delphi: como definir o comprimento de uma matriz dinâmica acessada por RTTI usando DynArraySetLength?

Gostaria de definir o comprimento de uma matriz dinâmica, conforme sugerido emesta postagem. Eu tenho duas classes TMyClass e o TChildClass relacionado definido como

TChildClass = class
private
  FField1:  string;
  FField2:  string;
end;

TMyClass = class
private
  FField1:  TChildClass;
  FField2:  Array of TChildClass;
end;

O aumento da matriz é implementado como

var
  RContext:     TRttiContext;
  RType:        TRttiType;
  Val:          TValue;      // Contains the TMyClass instance
  RField:       TRttiField;  // A field in the TMyClass instance
  RElementType: TRttiType;   // The kind of elements in the dyn array
  DynArr:       TRttiDynamicArrayType;
  Value:        TValue;  // Holding an instance as referenced by an array element
  ArrPointer:   Pointer;
  ArrValue:     TValue;
  ArrLength:    LongInt;
  i:            integer;
begin
  RContext := TRTTIContext.Create;
  try
    RType := RContext.GetType(TMyClass.ClassInfo);
    Val := RType.GetMethod('Create').Invoke(RType.AsInstance.MetaclassType, []);
    RField := RType.GetField('FField2');
    if (RField.FieldType is TRttiDynamicArrayType) then begin 
      DynArr := (RField.FieldType as TRttiDynamicArrayType);
      RElementType := DynArr.ElementType;
      // Set the new length of the array
      ArrValue := RField.GetValue(Val.AsObject);
      ArrLength := 3;   // Three seems like a nice number
      ArrPointer := ArrValue.GetReferenceToRawData;
      DynArraySetLength(ArrPointer, ArrValue.TypeInfo, 1, @ArrLength);
      { TODO : Fix 'Index out of bounds' }
      WriteLn(ArrValue.IsArray, ' ', ArrValue.GetArrayLength);
      if RElementType.IsInstance then begin
        for i := 0 to ArrLength - 1 do begin
          Value := RElementType.GetMethod('Create').Invoke(RElementType.AsInstance.MetaclassType, []);
          ArrValue.SetArrayElement(i, Value);
          // This is just a test, so let's clean up immediatly
          Value.Free;
        end;
      end;
    end;
    ReadLn;
    Val.AsObject.Free;
  finally
    RContext.Free;
  end;
end.

Sendo novo no D2010 RTTI, suspeitei que o erro pudesse depender da obtenção de ArrValue da instância da classe, mas a subseqüenteWriteLn imprime "TRUE", então eu descartei isso. Decepcionante, porém, o mesmoWriteLn relata que o tamanho de ArrValue é 0, o que é confirmado pela exceção "Índice fora dos limites" que recebo ao tentar definir qualquer um dos elementos na matriz (por meio deArrValue.SetArrayElement(i, Value);) Alguém sabe o que estou fazendo de errado aqui? (Ou talvez exista uma maneira melhor de fazer isso?) TIA!

questionAnswers(2)

yourAnswerToTheQuestion