QuickValue.dpr 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. program QuickValue;
  2. {$APPTYPE CONSOLE}
  3. {$R *.res}
  4. uses
  5. System.SysUtils,
  6. RTTI,
  7. Variants,
  8. System.TypInfo,
  9. Quick.Json.Serializer,
  10. Quick.Commons,
  11. Quick.Console,
  12. Quick.Value,
  13. Quick.Value.RTTI;
  14. type
  15. TDynArrayOfVariant = array of TVarRecord;
  16. TMyArray = TArray<TObject>;
  17. PMyArray = ^TMyArray;
  18. TMyObject = class
  19. private
  20. fName : string;
  21. fAge : Integer;
  22. public
  23. property Name : string read fName write fName;
  24. property Age : Integer read fAge write fAge;
  25. end;
  26. var
  27. flexvalue : TFlexValue;
  28. arr : TArray<string>;
  29. value : TValue;
  30. function Test2(aValue : Pointer) : string;
  31. var
  32. arr : TMyArray;
  33. parr : Pointer;
  34. begin
  35. //if VarIsArray(aValue) then
  36. begin
  37. //parr := VarArrayLock(aValue);
  38. //SetLength(arr,VarArrayHighBound(aValue,1) + 1);
  39. parr := aValue;
  40. SetLength(arr,2);
  41. arr := PMyArray(@parr)^;
  42. var a := arr[0];
  43. var b := TMyObject(a).Name;
  44. end;
  45. end;
  46. var
  47. obj : TMyObject;
  48. arr2 : TArray<TMyObject>;
  49. vari : Variant;
  50. begin
  51. try
  52. obj := TMyObject.Create;
  53. obj.Name := 'Joe';
  54. obj.Age := 30;
  55. arr2 := [obj];
  56. //vari := arr2;
  57. test2(arr2);
  58. arr := ['item1','item2','item3','item4'];
  59. flexvalue := arr;
  60. arr := TArray<string>(flexvalue.AsPointer);
  61. coutFmt('arr[1]=%s',[arr[1]],etInfo);
  62. ConsoleWaitForEnterKey;
  63. except
  64. on E: Exception do
  65. Writeln(E.ClassName, ': ', E.Message);
  66. end;
  67. end.