首页 > 解决方案 > Delphi TValue.Make 从 RttiContext.FindType 与原始类型(整数,字符串,布尔)

问题描述

大家好,我想TValueTValue.Make两个字符串做一个:

aNewValue := '1';        // value of TValue 
aOldType  := 'integer';  // Name of TValue.TypeInfo

TValue.Make需要一个PTypeInfo. 这个想法是 retrive TypeInfoof aOldTypewith TRttiContext.FindTypeTRttiContext.FindType返回一个TRttiTypeTRttiTypeRttiType.Handle返回一个PTypeInfo

这是我的代码,当我调用aRttiType.HandleanAccess violation

var
   aRttiContext: TRttiContext;
   aRttiType:    TRttiType;
   aOldKey, aNewValue, aOldType, aNewType: string;
   aValue: TValue;
   ATypeInfo: PTypeInfo;
begin
  aNewValue := '1';
  aOldType  := 'integer';

  aRttiContext := TRttiContext.Create;
  try
      aRttiType := aRttiContext.FindType(aOldType);
      ATypeInfo := aRttiType.Handle;

      TValue.Make(@aNewValue, ATypeInfo, aValue);

      aNewType := LowerCase(aValue.TypeInfo^.Name);

      if aNewType <> aOldType then
        raise Exception.CreateFmt('"%s" is "%s" expected "%s"', [aNewValue, aNewType, aOldType]);
  finally
    aRttiContext.Free;
  end;

问题似乎aRttiContext.FindType('integer')返回零

我如何获得原始类型(整数、字符串、布尔值)的类型(PTypeInfo)?

这行得通

TValue.Make(@aNewValue, TypeInfo(Integer), aValue);

但是如何使动态,例如:

TValue.Make(@aNewValue, GetTypeInfoWithMagic('Integer'), aValue);

标签: delphi

解决方案


推荐阅读