代码之家  ›  专栏  ›  技术社区  ›  Branko

德尔福2010 RTTI-RttiContext.FindType

  •  3
  • Branko  · 技术社区  · 14 年前

    RttiContext.FindType('Classes.TStringList') RttiContext.FindType('MyUnit.TMyClass') 我总是得到零(当然我的单位在uses子句中)。怎么了,怎么了?

    例子:

    unit MyUnit; 
    interface 
    uses 
      Classes; 
    type 
      TMyClass = class(TStringList) 
      end; 
    implementation 
    end. 
    
    Main unit: 
    ... 
    uses 
      MyUnit,
    ... 
    var 
      oCont: TRttiContext; 
      oType: TRttiType; 
    begin 
      oCont := TRttiContext.Create; 
      try 
        oType := oCont.FindType('MyUnit.TMyClass'); <== oType = nil !! 
    ... 
    
    2 回复  |  直到 14 年前
        1
  •  8
  •   David Heffernan    10 年前

    可能这个类没有被delphi链接器包含在最终的可执行文件中。快速尝试可以如下所示:

    1. 在类上声明静态方法。这个方法应该是空的,简单的 begin end .
    2. 在这个单元的初始化部分调用这个静态方法。
    3. 确保在项目的某个地方引用了该单元。
    4. TRttiContext.FindType .
        2
  •  1
  •   Mason Wheeler    14 年前

    可能是一些事情。很难说没有看到你的代码,但这里有一些建议看。TMyClass是 部门?该单元的RTTI生成是否开启?MyUnit是否在尚未加载的包中?