rtti相关内容

什么是将Delphi对象树序列化到XML的好方法 - 使用RTTI而不是自定义代码?

将Delphi对象树序列化为XML的好方法是使用RTTI而不是自定义代码? 我本来希望发现这个功能已经是内置到Delphi中,但似乎并不是这样。 我发现了几个可能会执行此功能的组件(发布在下面)。你有没有使用过任何一个或其他产品?你建立了自己的?我在Delphi中缺少一些明显的东西? 解决方案 您可以使用JVCL TJvAppXMLFileStorage组件来序列化TPersi ..
发布时间:2017-04-23 16:56:30 Delphi

Delphi如何使用RTTI获取属性的默认值

如果我有这样的类: TServerSettings =类(TSettings) strict private FHTTPPort:整数; 发布 属性HTTPPort:整数读取FHTTPPort写入FHTTPPort默认值为80; 结束 如何获取默认值属性使用RTTI的 HTTPPort 属性 解决方案 像这样: {$ APPTYPE CONSOL ..
发布时间:2017-04-23 16:44:14 Delphi

Delphi 2010 RTTI - RttiContext.FindType

使用 RttiContext.FindType('Classes.TStringList')我得到TStringList的RttiType没有问题。但是使用 RttiContext.FindType('MyUnit.TMyClass')我总是没有(当然MyUnit在uses子句中)。为什么,有什么问题? 示例: unit MyUnit; 接口 使用 类; type TMyC ..
发布时间:2017-04-23 16:38:51 Delphi

获取静态数组的RTTI记录字段类型失败

我正在尝试获取记录字段的类型,以便创建正确的比较器(作为任何/几乎任何记录类型的通用解决方案)。我找不到静态数组的类型信息: TArrFieldTest = record a:string; b:数组[0..3]字节; 结束 程序测试; var rttiContext:TRttiContext; rttiType:TRttiType; rttiFields:T ..
发布时间:2017-04-23 16:31:34 Delphi

如何获取TObjectList< T>的子项类型纯粹是由Delphi中的RTTI信息(即不使用任何实际的对象实例)?

我正在使用RTTI来实现用于流式传输任意Delphi对象的通用代码,为了使其工作(更具体地说,为了使加载部分工作),我需要以某种方式获取子项类型的 TObjectList 字段,而不使用任何实际的对象实例。 需求的明显原因不使用任何实际的对象实例是在从流中加载对象的情况下(仅基于要加载的对象的类类型的知识),在加载之前,我将不会有任何实例可用已经完成了 - 我宁愿只能访问有关课程的纯 ..
发布时间:2017-04-23 15:55:45 Delphi

如何确保RTTI可用于类,而不实例化?

我最近在此论坛上发布了一个问题,要求提供有关在DXE2可执行文件中缺少RTTI信息。 该帖子是我实际案例的一个删除版本。 RRUZ来抢救,所以被剥离的版本很快就解决了。原来的问题依然存在,所以现在我正在发布。 “主”: 程序MissingRTTI; {$ APPTYPE CONSOLE} 使用 System.SysUtils,RTTI,MyUnit在'MyUnit.pas',R ..
发布时间:2017-04-23 15:49:30 Delphi

TRttiMethod.Invoke函数在重载方法中不起作用?

我正在使用 TRttiMethod.Invoke创建课程实例函数,但是当构造函数或方法重载时,rtti不会调用正确的方法。 我写了一个示例应用程序来解决我的问题。 程序ProjectFoo; {$ APPTYPE CONSOLE} {$ R * .res} 使用 Rtti, System.SysUtils ; type TFoo = class ..
发布时间:2017-04-23 15:47:17 Delphi

如何使用SuperObject来调用在Delphi中使用Object作为参数的方法?

我们可以使用SuperObject库通过名称来调用某个对象的方法,并使用SOInvoker方法将其参数作为一个json字符串,就像这样 answer d喜欢知道如何发送创建的对象作为参数。我试图发送它像 LObjectList:= TObjectList.Create; LSuperRttiCtx:= TSuperRttiContext.Create; LSuperObjec ..
发布时间:2017-04-23 15:25:05 Delphi

德尔福新型RTTI的实用性 - 属性,价值观

我发现一个关于Delphi中新的RTTI的很好的解释,但是我不明白我读过的一个重要的事情 - 我可以在哪里使用? 它应该替换什么? 解决方案 扩展RTTI的工作原理就像Reflection in .NET。它可以访问您的内部应用程序结构信息。您可以访问类属性,方法等。在运行时,您以前无法执行的范围。 使用它的一些方法: 类到XML的序列化/反序列化或其他媒体 将对象映射 ..
发布时间:2017-04-23 13:16:48 Delphi

为什么要在Delphi中关心RTTI?

我听过很多关于新的/改进的德尔福2010的RTTI功能,但我必须承认我的无知...我不明白。我知道每个版本的Delphi都支持RTTI ...我知道RTTI(运行时类型信息)允许我在应用程序运行时访问类型信息。 但是是什么意思? Delphi 2010的RTTI支持与在.NET中的反思相同? 有人可以解释为什么RTTI有用吗?假装我是你的头发老大,帮我理解为什么RTTI很酷。如何在现实 ..
发布时间:2017-04-23 13:10:26 Delphi

如何通过名称(字符串)访问变量?

我有一些全局字符串变量。 我必须创建我可以通过的功能存储在一些结构。 以后我需要枚举他们并检查他们的价值。 这样怎么可以轻松实现? (我想我需要某种反射或存储指针数组)。 无论如何,任何帮助将不胜感激。 谢谢! 解决方案> 首先,您不能为此目的使用Delphi的RTTI,因为Delphi 7的RTTI仅涵盖已发布的课程成员。即使您使用的是Delphi XE,全局 ..
发布时间:2017-04-23 13:04:01 Delphi

在运行时复制组件

有没有一种简单的方式来复制父组件下的所有子组件,包括其已发布的属性?例如: TPanel TLabel TEdit TListView TSPecialClassX 当然是最重要的因素,它应该复制任何新的组件,我放在TPanel,而不修改代码在正常情况下。 我听说过RTTI,但从来没有使用过它。任何想法? 解决方案 阅读此页 Delphi中的运行时类型信 ..
发布时间:2017-04-23 13:02:30 Delphi

delphi xe禁用RTTI

我最近使用delphi xe,但是exe大小很大,因为rtti(我想) 如何删除rtti,我可以使我的应用程序大小小作为德尔福2009年应用程序(490 kb),没有comprssion;和rtti的使用是什么 解决方案 简而言之(在splash中的链接提供的全部故事): {$ RTTI EXPLICIT METHODS([])PROPERTIES([])FIELDS([])} ..
发布时间:2017-04-23 12:25:48 Delphi

访问受保护的事件的TWinControl

想象一下,你想分配自己的事件过程: procedure TSuperObject.DoSomething(Sender:TObject; Button:TMouseButton ; Shift:TShiftState; X,Y:Integer); begin ShowMessage('是的,我在做'); 结束 到表单上的任何TWinControl。通常如果您在表单 ..
发布时间:2017-04-23 12:12:22 Delphi

为什么我得到“类型没有typeinfo”枚举类型的错误

我已经宣布了以下枚举类型,其中我希望第一个成员的序数值为1(一),而不是通常的0(零): 键入 TMyEnum =( meFirstValue = 1, meSecondValue, meThirdValue ); 如果我打电话给 TypeInfo()作为调用 GetEnumName()的一部分,我收到编译器错误: GetEnumName(TypeInf ..
发布时间:2017-04-23 11:30:13 Delphi

为什么从一个组合框的项目不能复制到另一个?

我在表格的tab控件的标签页上有多个组合框。尝试循环使用控件无效(请参阅 this )。 所以,我试图从另一个角度来看:根据他们的名字找到控件。作为初始POC,我只是想通过提供在设计时为空的组合框的名称(“cmbxRow0Element1”)来强制它,并将项目从cmbxRow0Element0分配给它。但这两个尝试: 控制ctrl = this.Controls [“cmbxRow0E ..
发布时间:2016-12-19 15:53:07 C#/.NET

为什么从类到子类的动态转换需要类是多态的?

根据我的理解,使动态转换与静态转换不同的是它使用RTTI,并且如果变量的动态类型(当从基础到派生的转换)不匹配时,它会失败的事实。但为什么类必须是多态的,如果我们有RTTI呢? 编辑:因为有一些混淆关于使用单词“多态“,这里是在cplusplus.com中的条目,促使我问这个: dynamic_cast只能用于指针和对象的引用。其目的是确保类型转换的结果是所请求类的有效完整对象。 ..
发布时间:2016-11-14 00:06:29 C/C++开发

指向对象(C ++)开始的指针

我需要一种方法来获取C ++中对象的开始的指针。这个对象在模板中使用,所以它可以是任何类型(多态的或非多态的),并且可能是使用多重继承的对象。 我发现本文介绍了一种方法(请参阅“动态转换”部分)使用typeid和一个dynamic_cast到void *在T是一个多态类型的情况下。 这在MSVC上工作得很好,但是在GCC(4.x) 有没有人知道一种方法: 使GCC正常运行, ..
发布时间:2016-11-13 23:17:10 C/C++开发