使用RttiContext在运行时查找类型

时间:2014-10-02 20:49:53

标签: delphi delphi-xe5

我想从以前保存在数据库中的类型的名称(QualifiedName)创建类。但当我调用函数TRttiContext.FindType(' QualifiedName')时,我发现只有几个类

注意:所有类都是公共的,所有类都在同一个单元中,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并抱歉我的英语..

1 个答案:

答案 0 :(得分:1)

我解决了这个问题,实际上只需要至少使用一次类或在程序中的任何地方引用类就足以确保编译器/链接器不能从可执行文件中删除它{{3}感谢All