Delphi 2010 RTTI - RttiContext.FindType

标签 delphi delphi-2010 rtti

使用RttiContext.FindType('Classes.TStringList')我可以毫无问题地获得TStringList的RttiType。但是使用 RttiContext.FindType('MyUnit.TMyClass') 我总是得到 nil (当然 MyUnit 在 use 子句中)。为什么,出了什么问题?

示例:

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 !! 
... 

最佳答案

delphi 链接器可能未将该类包含在最终的可执行文件中。快速尝试如下:

  1. 在您的类上声明一个静态方法。该方法应该是一个空方法,一个简单的begin end
  2. 在此单元的初始化部分调用此静态方法。
  3. 确保您的项目中某处引用了该单元。
  4. 现在您应该看到带有 TRttiContext.FindType 的类。

关于Delphi 2010 RTTI - RttiContext.FindType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3460382/

相关文章:

multithreading - 访问自己的线程信息(delphi)

ios - Delphi TGridLayout 布局和项目之间的填充

delphi - 释放的 TStringList 在 FastMM4 报告中算作内存泄漏的原因

具有单个 getter 和 setter 的 Delphi 属性

c++ - 我可以判断一个 std::type_info 对象是否等于另一个对象或从另一个对象派生的类吗?

delphi - 访问 TWebBrowser 显示但不包含在其图像集合中的图像

multithreading - 在不同步的情况下从线程读取值是否安全?

delphi - 在Delphi中复制大量文件

delphi - 如何在 Delphi 2010 中的 TTrackBar 上设置自定义刻度?

c++ - 使用 Visual Studio .ncb 文件进行反射