2014-10-02 1 views
2

Я хочу создать классы из имени типа, ранее сохраненного в базе данных (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 и извините за свой английский ..

+0

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

+2

Может быть, причина здесь: [Delphi 2010 RTTI - RttiContext.FindType] (http://stackoverflow.com/q/3460382/576719). Литератором могут быть исключены классы. –

+0

Спасибо, я попытаюсь это сделать. – relghers

ответ

1

Я решил проблему, на самом деле этого было достаточно, чтобы использовать хотя бы один раз класс или сделать ссылку на класс в любом месте программы, чтобы убедиться, что компилятор/компоновщик не может удалить его из исполняемого файла The Solution Thank s to All

Смежные вопросы