Delphi 2010 RTTI - RttiContext.FindType

发布于 2024-09-14 02:24:14 字数 539 浏览 7 评论 0原文

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

With RttiContext.FindType('Classes.TStringList') I get RttiType of TStringList with no problem. But with RttiContext.FindType('MyUnit.TMyClass') I always get nil (of course MyUnit is in uses clause). Why, what is wrong?

Example:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

终止放荡 2024-09-21 02:24:14

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

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

Probably the class has not included by the delphi linker in the final executable. A fast try can be the following:

  1. Declare a static method on your class. This method should be an empty method, a simple begin end.
  2. Call this static method in the initialization section of this unit.
  3. Ensure that the unit is referenced in your project somewhere.
  4. Now you should see the class with TRttiContext.FindType.
我一向站在原地 2024-09-21 02:24:14

这可能是一些事情。如果没有看到您的代码,很难说,但这里有一些值得一看的建议。 TMyClass 是接口部分中的公共类型吗?该设备的 RTTI 生成功能是否打开? MyUnit 是否位于尚未加载的包中?

It could be a handful of things. Hard to say without seeing your code, but here are a few suggestions to look at. Is TMyClass a public type in the interface section? Is RTTI generation turned on for that unit? Is MyUnit in a package that hasn't been loaded yet?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文