Я хочу создать классы из имени типа, ранее сохраненного в базе данных (QualifiedName). но когда я назвал функцию TRttiContext.FindType («QualifiedName»), я нашел лишь несколько классовИспользование RttiContext для поиска типа во время выполнения
Примечание: Все классы являются общедоступными и все классы находятся в одном блоке и AllClasses наследуется от TMyClassParent
Procedure TMyObjects.Load;
var s, typeName : string;
ctx : TRttiContext;
t: TRttiInstanceType;
tp: TRttiType;
o: TMyClassParent;
begin
ctx := TRttiContext.Create;
try
While not Table.Eof do begin
typeName := format('%s.%s',[FieldByName('UnitName').AsString,FieldByName('TypeName').AsString]);
if trim(typeName) <> '' then begin
tp := ctx.FindType(typeName);
///..here when I debug some Types exists (tp <> nil) and for others tp = nil...
t := tp as TRttiInstanceType;
if Assigned(t) then begin
o := t.MetaClassType.Create;
//...
///...
end;
///....
end;
//....
finally
ctx.free;
end;
Есть ли кто-нибудь, кто может мне помочь, я использую Delphi XE5 и извините за свой английский ..
OT: для этого есть встроенный механизм RTL. Вы можете зарегистрировать класс по процедуре ['RegisterClass'] (http://docwiki.embarcadero.com/Libraries/XE5/en/System.Classes.RegisterClass) и получить ее с помощью [' GetClass'] (http: // docwiki.embarcadero.com/Libraries/XE5/en/System.Classes.GetClass) или ['FindClass'] (http://docwiki.embarcadero.com/Libraries/XE5/en/System.Classes.FindClass). – TLama
Может быть, причина здесь: [Delphi 2010 RTTI - RttiContext.FindType] (http://stackoverflow.com/q/3460382/576719). Литератором могут быть исключены классы. –
Спасибо, я попытаюсь это сделать. – relghers