I have classnames in a stringlist. For example it could be \'TPlanEvent\', \'TParcel\', \'TCountry\' etc.
Now I want to find out the sizes by looping the list.
If your classes derive from TPersistent you can use RegisterClass and FindClass or GetClass . Otherwise you could write some kind of registration mechanism yourself.
In Delphi 2010 you can use:
function StringToClass(AName: string): TClass;
var
LCtx: TRttiContext;
LTp: TRttiType;
begin
Result := nil;
try
LTp := LCtx.FindType(AClassName);
except
Exit;
end;
if (LTp <> nil) and (LTp is TRttiInstanceType) then
Result := TRttiInstanceType(LTp).Metaclass;
end;
One note. Since you only keep the class names in the list this method will not work because TRttiContext.FindType expects a fully qualified type name (ex. uMyUnit.TMyClass). The fix is to attach the unit where you store these classes in the loop or in the list.
Since you're using a stringlist you can store the classes there, too:
var
C: TClass;
StringList.AddObject(C.ClassName, TObject(C));
...
for I := 0 to StringList.Count - 1 do
Size := TClass(StringList.Objects[I]).InstanceSize;
...