Type TMyArray = array of integer;TMyClass = classpublihedfunction Do:TMyArray;end;function TMyClass.Do:TMyArray;beginSetLength(Result,5);for i:=0 to 4 Result[i]=3;end;....................y:TValue;Param:array of TValue;.........y=Methods[i].Invoke(Obj,Param);//delphi give me a DynArray type kind,is working,Param works to any functions.if Method[i].ReturnType.TypeKind = tkDynArray then//is working...begin I want to set length for y to 10000//i don't kNow how to write.end;
我不喜欢Generics Collections.
解决方法 TValue不是为了对其内容进行任意 *** 作而设计的(如果是这样的话,它将有更多帮助器用于设置记录字段等),而是用于在具体静态类型和动态RTTI之间传输值.在这方面,TValue.SetArrayElement是一个异常,事后看来,或许不应该被包括在内.但是,你问的是可能的:uses Rtti;type TMyArray = array of Integer; TMyClass = class function Go: TMyArray; end;function TMyClass.Go: TMyArray;var i: Integer;begin SetLength(Result,5); for i := 0 to 4 do Result[i] := 3;end;procedure P;var ctx: TRttiContext; v: TValue; len: Longint; i: Integer;begin v := ctx.GetType(TMyClass).getmethod('Go').Invoke(TMyClass.Create,[]); Writeln(v.ToString); len := 10; DynArraySetLength(PPointer(v.GetReferencetoRawData)^,v.TypeInfo,1,@len); Writeln(v.GetArrayLength); for i := 0 to v.GetArrayLength - 1 do Writeln(v.GetArrayElement(i).ToString);end;begin P;end.总结
以上是内存溢出为你收集整理的数组 – RTTI动态数组TValue Delphi 2010全部内容,希望文章能够帮你解决数组 – RTTI动态数组TValue Delphi 2010所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)