rtti专题提供rtti的最新资讯内容,帮你更好的了解rtti。
请问有人可以解释我在Delphi中公开和发表的班级成员有什么区别? 我试图看看Delphi的帮助,我明白这些成员具有相同的可见性,但是我不太了解它们有什么不同,何时应该使用已发布的成员而不是公开的成员。 非常感谢。 公共属性和发布的属性具有与您已经说明的相同的可见性。已发布的属性包含在RTTI中,公共属性不是。
我发现一个 great explanation about the new RTTI in Delphi,但我不明白我读过的一件重要的事情 – 我在哪里可以使用? 它应该替代什么? 扩展的RTTI的工作原理就像Reflection in .NET。它可以访问您的内部应用程序结构信息。您可以访问类属性,方法等。在运行时,您以前无法执行的范围。 一些使用它的方法: >将类序列化/反序列化为XML或其他
Delphi 如何获取当前函数的名称? 原理是先获取本函数的入口地址,EIP。 再通过RTTI枚举类的所有成员函数名称,和成员函数入口地址。根据入口地址和EIP比较,找到成员函数名称。 不用担心RTTI关闭。因为新版本的DELPHI是关不掉这些基础的RTTI信息。都被编译到程序中去了。 所以可以使用RTTI的方式。 本函数只能用于类的成员函数,不能用于非类的函数。 unit untGetFuncN
给定记录: MyRecord = record Company: string; Address: string; NumberOfEmplyees: integer; 你可以编写一个函数调用 function UpdateField(var FieldName: string; FieldValue: variant): bool; 以便: UpdateField('Co
在Delphi 2010中使用RTTI系统,有没有办法找出属性是否是TDateTime?当我回调为Variant时,如果我检查属性类型,它现在将其视为双精度。这是因为它只能看到基本类型吗? (TDateTime = double) 尝试检查 TRttiProperty.PropertyType的Name属性 我没有德尔福2010,但这在XE工作。 {$APPTYPE CONSOLE} uses
我已经声明了以下枚举类型,其中我希望第一个成员的序数值为1(一)而不是通常的0(零): type TMyEnum = ( meFirstValue = 1, meSecondValue, meThirdValue ); 如果我调用TypeInfo(),例如作为调用GetEn
我正在努力将一个旧项目从Delphi 2007迁移到Delphi 2010.我发现的一件事是,生成的可执行文件的大小增加了一倍以上,而原始版本已经非常大了. (超过50 MB.)我怀疑它与扩展RTTI有很大关系. 由于该项目早于Delphi 2010,因此它不会在任何地方使用扩展的RTTI,并且我希望保守包含它.有没有办法使用项目选项对话框全局设置{$RTTI EXPLICIT METHODS([
考虑这个简单的代码 {$APPTYPE CONSOLE} uses Rtti, SysUtils; type {$M+} TFoo = class strict private class var Field1 : Integer; field2 : Integer; private field3 : Integer; class v
我有个问题.我是Delphi 2010中运行时类型信息的新手.我需要将动态数组的长度设置为TValue.你可以看到代码. Type TMyArray = array of integer; TMyClass = class publihed function Do:TMyArray; end; function TMyClass.Do:TMyArray; begin SetLength(Resu
在运行时,是否存在查找从特定基类下降的所有类的方法? 例如,假装有一个类: TLocalization = class(TObject) ... public function GetLanguageName: string; end; 或者假装有一个班级: TTestCase = class(TObject) ... public procedure Run; virtual; en
我们可以使用SuperObject库通过名称调用某个对象的方法,并使用SOInvoker方法将其参数作为json字符串,如此 answer 我想知道如何将创建的对象作为参数发送.我试着像发送它一样 LObjectList := TObjectList.Create; LSuperRttiCtx := TSuperRttiContext.Create; LSuperObjectParameter :
我正在使用RTTI实现用于流式传输任意Delphi对象的通用代码,并且为了使其工作(更具体地说,为了使加载部分工作),我需要以某种方式获得TObjectList的子项类型&lt ; T>不使用任何实际对象实例的字段. 要求不使用任何实际对象实例的明显原因是,在从流加载对象的情况下(仅基于要加载的对象的类类型的知识),我将不会有任何实例在加载完成之前完全可用 – 我宁愿只能访问相关类的纯RTTI数据
我正在尝试获取记录字段的类型以创建正确的比较器(作为任何/几乎任何记录类型的通用解决方案).我找不到静态数组的类型信息: TArrFieldTest = record a: string; b: array[0..3] of byte; end; procedure Test; var rttiContext: TRttiContext; rttiType: TRtt
我正在写一个类来处理我的可执行文件中的安全性(检查序列号,试用日期检查等).在编译可执行文件(即使在版本构建中,关闭所有调试和RTTI生成),当我在NotePad中打开它并搜索原始数据中的方法名称时,我可以看到汇编我的类的所有方法的名称.在代码库中的任何类中都没有已发布的成员. 这不利于保护.有没有办法告诉Delphi不将方法名称存储在可执行文件中?如果没有RTTI,没有COM爆炸,为什么要存储它
我有这个测试计划 https://gist.github.com/real-mielofon/5002732 RttiValue := RttiMethod.Invoke(RttiInstance, [10]); 和简单的单位与界面: unit Unit163; interface type {$M+} ISafeIntf = interface function TestMeth
众所周知,当我们调用类的构造函数时: instance := TSomeClass.Create; Delphi编译器实际上做了以下事情: >调用静态NewInstance方法 分配内存并初始化 内存布局. >调用构造方法 执行类的初始化 >调用AfterConstruction方法 这很简单易懂.但是我不太清楚编译器如何在第二和第三步中处理异常. 在D2010中,似乎没有明确的方法来创建使用RT
这是我在这个论坛上的第一篇文章,希望能以正确的方式提出我的问题.对不起长度,但是我觉得很难把它砍下来. 我正在使用Delphi XE2与一个相当大的SOAP服务进行通信.我已成功导入wsdl,一切都正常工作.但是,我发现自己写了很多类似的代码.我想要一个通用的方法来调用我的Web服务.我也很难多次读取我的代码,因为我现在必须为每种类型的调用写入这么多的代码. 更多的是一个周末的程序员,我远远不能掌
这是有效的代码与更新的Delphi版本? // handle HTTP request "example.com/products?ProductID=123" procedure TMyRESTfulService.HandleRequest([QueryParam] ProductID: string); 在此示例中,参数“ProductID”归因于[QueryParam].如果这是Delph
什么是将Delphi对象树序列化到 XML的好方法 – 使用RTTI而不是自定义代码? 我本来希望发现这个功能已经在Delphi中构建了,但似乎并不是这样. 我发现了一些组件(发布在下面),看起来他们可能会执行这个功能.你有没有使用过任何一个或其他产品?你建立了自己的?我在Delphi中缺少一些明显的东西吗? 您可以使用JVCL TJvAppXMLFileStorage组件来序列化TPersist
考虑到这样一个枚举: type TTypeOfData = ( [XmlName('ABC')] todABC, [XmlName('DEF')] todDEF, [XmlName('GHI')] todGHI ); 其中XmlName是用于定义此枚举成员的序列化字符串的自定义属性. 如何探索这个枚举的每个成员附加的属性? 与枚举中的元素相关联的属性当前不存储在