为什么GetType成功时FindType却获取不到RTTI?

2024-02-21

我正在尝试使用来抓住一个物体TRttiContext.FindType(QualifiedTypeName)。这是我所得到的:

program MissingRTTI;
{$APPTYPE CONSOLE}
uses System.SysUtils, RTTI, Classes;
type
  TMyClass = class(TObject) end;
var
  rCtx:   TRttiContext;
  rType:  TRttiInstanceType;
begin
  rCtx := TRttiContext.Create();
  rType := rCtx.GetType(TypeInfo(TMyClass)) as TRttiInstanceType;
  if (rType <> nil) then begin
    WriteLn('Type found using TypeInfo');
  end;
  rType := rCtx.FindType(TMyClass.QualifiedClassName) as TRttiInstanceType;
  if (rType <> nil) then begin
    WriteLn('Type found using qualified class name.');
  end;
  ReadLn;
  rCtx.Free();
end.

不幸的是,只有rCtx.GetType似乎找到了想要的类型。 (我还尝试使用 GetTypes 列出所有类型。所需的类型不会出现在结果数组中。)有人知道如何强制编译器为此类型发出 RTTI 吗?


您致电FindType http://docwiki.embarcadero.com/Libraries/en/System.Rtti.TRttiContext.FindType方法不返回 Rtti 信息,因为此函数works only for public types。所以如果你检查rType.IsPublicType http://docwiki.embarcadero.com/VCL/2010/en/Rtti.TRttiType.IsPublicType属性返回的值为 false 。

公共类型必须在单元的接口部分中声明(以被识别为公共)。所以如果你移动TMyClass类定义到单元的接口部分,您将能够使用FindType没有什么问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么GetType成功时FindType却获取不到RTTI? 的相关文章

  • 阻止 IDE 自动添加使用单位

    我正在将 Lazarus 项目转移到德尔福西雅图 Lazarus 项目依赖于 40 多个单元 包括控件 并具有多种应用程序 在所有项目的使用条款中 他们使用了以下内容 uses Classes SysUtils Forms Controls
  • Delphi - Indy - 保存 GMail 草稿

    我一直在 Delphi 下使用 Indy 通过 gmail 帐户发送消息 使用 TIdSMTP 和 TIdMessage 组件 这绝对没问题 但是 我的客户请求将消息保存到 DRAFTS 文件夹 以便他在实际发送消息之前对 以编程方式创建的
  • 似乎有时 Delphi 是区分大小写的 - “覆盖方法应该与祖先的大小写匹配”

    今天我遇到了一个 奇怪 的提示 覆盖方法 xxxx 应匹配祖先 yyyy 的大小写 解决方案是完全按照祖先中的方式声明方法名称 我相信这是自 Delphi Net 编译器以来编译器中保留的东西 与祖先中完全相同的方法声明方法使编译器 沉默
  • TFrame继承重构

    我提出的另一个 TFrame IDE 注册组件问题 感谢各位程序员的帮助 尝试 Darrian 的 TFrame 继承建议here https stackoverflow com questions 382562 delphi visual
  • Delphi Prism 中 TStringList 的替代品。

    我正在将用 Delphi 2007 Net 编写的应用程序迁移到 Delphi Prism 哪个是替换 TStringList 和 TStrings 类的最佳选择 提前致谢 Bye 只需使用 NET 框架中内置的 List 类型 或者字符串
  • 有用的 Delphi 代码模板

    我用 Delphi 编程已经两年多了 我大概只有 5 个自定义模板 我觉得我应该有更多 如果有人有任何特别有用的东西 那么在 stackoverflow 上有一个很好的存储库就太好了 我不在乎您使用的是 Delphi 2009 语法还是 D
  • 在 Delphi 中将对象转换为 OleVariant

    有没有办法在 OleVariant 中传递包装并解开 TObject 后代 我正在尝试跨自动化对象传递 TObject 我知道这不是一个好主意 但我没有更好的选择 该对象将在来自同一自动化 dll 的对象之间传递 如果这有什么区别的话 像这
  • 德尔福和Doxygen

    我想使用 doxygen pas2dox 记录我的源代码 当我设置好所有内容 包括过滤器和提取选项 提取所有内容 时 doxygen 运行良好 但生成的文档仅包含源文件作为链接 并且没有提取类型 方法 过滤后的源看起来不错 有任何提示如何定
  • 在 Delphi 中获取 TCheckbox 的总大小,包括框和文本

    我想获得 TCheckbox 的总大小 包括 Delphi 中的框和文本 我查看这篇文章Delphi FMX TCheckbox TRadiobutton 自动调整大小 https stackoverflow com questions 4
  • VirtualStringTree 正确/推荐使用

    我已经使用 virtualstringtree 一段时间了 我将它用于两个不同的用途 第一个是用于选择 显示数据的普通树 第二个是作为网格来显示 SQL 语句的输出 我加载到树中的所有数据都来自数据库 对于树示例 我有一个 ParentId
  • 如何从窗体单元外部访问delphi控件?

    我试图从如下定义的过程中调用计时器的 Enabled 属性 procedure Slide Form TForm Show Boolean 并且没有固定的形式名称 例如 Form2 Timer 将表单的单位放入使用列表后 这可以工作 For
  • 我有进程 ID,需要使用 Delphi 5 以编程方式关闭关联进程

    任何人都可以帮我提供一个编码示例 以便在我拥有进程 ID 时关闭关联的进程 我将使用 Delphi 5 在 Windows 2003 服务器上以编程方式执行此操作 如果您有进程 ID 并希望强制终止该进程 可以使用以下代码 function
  • 从不同的形式调用过程

    我正在使用 Lazarus 我有一个名为TForm1单元名称为 Unit 1 在这里我有一个名为mergeDATfile a shortint 这会产生一些东西 顺便说一句 我必须创建另一个名为TForm2里面有按钮 Button1 当它被
  • 什么是代码页 0?

    我正在使用Delphi函数 StringCodePage 我在 COM 函数 Acrobat Annotation getContents 请参阅我的其他帖子 返回的字符串上调用它 它返回 0 0是什么 安西 代码页 0 是 CP ACP
  • Delphi XE5 FireDAC 错误:无法加载供应商库 [libmysql.dll 或 libmysqld.dll]

    我在 Windows 7 64 位上使用 Delphi XE5 只是尝试 FireDAC 组件 我正在使用一个 TFDConnection 组件连接到本地 MySQL 数据库 v5 6 15 我已经将 libmysql dll 32位 v5
  • Delphi:如何计算大文件的 SHA 哈希值

    您好 我需要生成 5 Gig 文件的 SHA 您知道有一个非基于字符串的 Delphi 库可以做到这一点吗 你应该使用DCPcrypt v2 http www cityinthesky co uk cryptography html读取缓冲
  • 使用 IOmniTaskControl/TOmniWorker 时等待 Invoke 完成

    我使用 TOmniWorker 创建了 IOmniTaskControl 以便我可以定期在特定线程上运行代码块 因此 我将根据需要在此 IOmniTaskControl 上调用 Invoke 当我这样做时 有时需要等待与该工作相关的执行完成
  • 使用 Inno Setup 中格式化(部分粗体)的文本制作安装程序?

    有人看过 GOG com 游戏安装程序吗 如何制作像这样的欢迎文本字符串 包括单个标题中的路径和需要大小 其中部分内容加粗 以下是修改安装路径后如何更改字符串换行的示例 您可以使用TRichEditViewer http www jrsof
  • 如何获取属于某个进程的打开句柄的计数?

    您可以使用该程序流程浏览器 http technet microsoft com en us sysinternals bb896653查看正在运行的应用程序有多少个句柄 有没有办法用Delphi代码来获取这个数字 我有兴趣跟踪应用程序本身
  • 如何等到我启动的程序使用完该文件后才删除该文件?

    我一直在寻找一种方法来打开通过 Delphi 应用程序及其适当的应用程序保存到我的计算机上的文件 该文件存储在 SQL 数据库中的 Varbinary 字段中 加载到内存流中 然后通过 TMemoryStream 的 SavetoFile

随机推荐

  • Iframe SandBox 阻止嵌入对象

    为什么有例子Example http www ufilme ro index cereri 0 11为什么当我使用 沙箱我看不到播放器 我想使用沙箱只是为了阻止弹出窗口 但看起来如果我使用它我看不到播放器 有没有allow objects
  • 如何通过脚本从sql server代理获取失败的作业?

    我想获取 sql server 代理无法通过 sql 脚本启动或运行的失败作业 我创建了一个视图来获取sql server中失败的作业 CREATE VIEW dbo View Failed Jobs AS SELECT Job insta
  • 为什么遇到 302 响应时 WCF 无法调用 SOAP 服务?

    我编写了一个应用程序 首先调用 WCF 进行登录 我生成了带有服务引用的客户端代码 对于将服务安装到网络本地的客户来说 它工作得很好 然而 也有一个 SaaS 环境 其中这些相同的服务由企业权力控制 saas环境下 提示登录失败 使用 Fi
  • Javascript 多重或条件检查

    我进行了一些简单的 if else 检查 var IsCompanyContacttitleUpdate false var ContactStatus 1 if IsCompanyContacttitleUpdate false Cont
  • 无法使用 adb 从 Android 设备提取 APK

    我正在尝试从我的设备获取已安装应用程序的 APK 我正在按照中的说明进行操作这个答案 https stackoverflow com a 18003462 5466997但是在拉取它时 adb 说 APK 不存在 这是具体步骤 adb sh
  • 如何将Json对象从ajax传递到spring mvc控制器?

    我正在 SpringMVC 上工作 我正在将数据从 ajax 传递到控制器 但我的控制器中得到空值 请检查下面的代码 function searchText var sendData pName bhanu lName prasad aja
  • 在我的流程中了解 NIFI 中的通知和等待流程

    我是 NIFI 流程的新手 在我当前的工作中 我有通知和等待流程 有人可以帮助我理解这个流程吗 On what basis the Notify work in my case we have 4 schema files process
  • 获取第一行数据(如果存在于 SQLite 中)

    我正在编写一个应用程序 其中如果存在于 SQLite 数据库表中 我需要获取第一行数据 我已经编写了将数据存储到数据库中的代码 但现在我想从数据库中获取第一行数据到 TextView 中 助手类 Select Data public Str
  • Django - 在 render_change_form 中获取对象 ID (ModelAdmin)

    我有这两个模型和 modeladmin 在可用主机用户列表中添加新主机时 仅显示未分配给其他主机的主机用户 问题是 如果我编辑一个已经创建的主机 它的实际主机用户 ID 也会被过滤 所以我想要做的是排除当前分配的主机用户 ID 如何在从主机
  • Chrome 内容脚本不起作用:DOMContentLoaded 侦听器不执行

    我正在尝试编写可纠正 1 个论坛上的拼写错误的扩展代码 我正在尝试访问 p 标签 带有内容脚本 但它不会改变任何内容 使用下面的代码 document addEventListener DOMContentLoaded function d
  • 找不到“UIView”的接口声明

    我正在尝试添加一个目标 C祝酒图书馆 https github com scalessec Toast到我的 xcode 项目 但我收到了一些这样的错误 Cannot find interface declaration for UIVie
  • msiexec.exe - 嵌入

    我正在使用基于云的 EDR 平台来监控客户端受感染网络上发生的进程 我最近经常看到的是使用选项 Embedding 调用 msiexec exe C Windows System32 MsiExec exe Embedding 35507F
  • 当连续输入错误时,循环中断java

    当您连续两次输入随机值 例如 i 时 程序将终止 我希望 无效数据 请重试 和 您想再玩一次吗 不断重复 直到输入 N 或 Y 7 8 5 No numbers match Do you want to play again i Inval
  • 除法不返回我期望的十进制值[重复]

    这个问题在这里已经有答案了 可能的重复 这个部门有什么问题吗 https stackoverflow com questions 704702 whats wrong with this division 如果你分2 3 它应该返回0 66
  • 适用于 OSX 和 Windows 应用程序的 Eclipse info.plist 文件

    当我寻找隐藏 Java 应用程序停靠图标的方法时 我到处都看到info plist 文件这个 and info plist 文件表示 但我没有看到一个 我的问题是如何在 eclipse 中生成 info plist 文件 它属于哪里 当我导
  • 如何在 iPhone 的导航栏中添加右栏按钮

    我想在导航栏中添加一个右栏按钮项目 以便单击时执行某些功能 我创建了以下代码来添加右侧栏按钮项目 但完成后 栏按钮项目没有显示在导航栏中 void viewDidload self navigationItem rightBarButton
  • 从文件夹中的图像序列获取 numpy 数组

    我有一个文件夹 比如说video1一堆按顺序排列的图像frame 00 png frame 01 png 我想要的是格式为 4D numpy 数组 number of frames w h 3 这就是我所做的 但我认为它很慢 有没有更快或更
  • 在哪里可以找到图形命令 shell?

    终端和 shell 非常强大 但学习起来可能很复杂 尤其是要充分利用它们 有谁知道有一个更加基于 GUI 的命令 shell 可以帮助用户或以更友好的方式显示答案 我知道 IPython 但即使它的语法也有点复杂 尽管这是朝着正确方向迈出的
  • 将片段从 GraphQL 文件导入到另一个 GraphQL 文件不起作用

    我正在尝试使用 graphql 文件并传递变量来对空手道进行测试 在我的 graphql 模式上 我试图重用另一个 graphql 文件中的片段 我尝试按照以下说明进行操作https www apollographql com docs r
  • 为什么GetType成功时FindType却获取不到RTTI?

    我正在尝试使用来抓住一个物体TRttiContext FindType QualifiedTypeName 这是我所得到的 program MissingRTTI APPTYPE CONSOLE uses System SysUtils R