加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – TPropInfo的未记录成员

发布时间:2020-12-15 09:47:24 所属栏目:大数据 来源:网络整理
导读:System.TypInfo.TPropInfo有两个函数成员(至少在D-XE3中): function NameFld: TTypeInfoFieldAccessor; inline;function Tail: PPropInfo; inline; 我找不到他们的任何文档或其使用的任何示例.它们是什么,它们如何使用? (希望有资格作为一个问题.) 解决方
System.TypInfo.TPropInfo有两个函数成员(至少在D-XE3中):

function NameFld: TTypeInfoFieldAccessor; inline;
function Tail: PPropInfo; inline;

我找不到他们的任何文档或其使用的任何示例.它们是什么,它们如何使用? (希望有资格作为一个问题.)

解决方法

NameFld函数将属性的名称作为TTypeInfoFieldAccessor返回.

这允许您执行以下操作:

MyPropertyName:= MyPropInfo.NameFld.ToString;
if (PropInfoA.NameFld = PropInfoB.NameFld) then begin 
  writeln('property names are the same');
end;

TTypeInfoFieldAccessor在内部存储shortstring中的属性名称.
由于NextGen编译器不支持短串,因此使用PByte类型.
(我想作者不想用ifdefs乱丢源并删掉PShortstring引用)

Tail的输入是指向内部短串的长度字段的PByte.

这是尾部的源代码.

function TTypeInfoFieldAccessor.Tail: PByte;
begin
  Result:= 
    FData    //Start of the shortstring 
    + FData^ + //Length of the stringData
    + 1; //Add one for the length byte itself
end;

因为shorttrings不是null终止,所以你不能做一个简单的“循环,直到找到null char”这种循环.因此,可以使用从开始到尾部的循环来将短串转换为正常串.在实际的RTL源代码中奇怪的是,长度字节在任何地方都使用,而不是尾函数;所以它看起来像一个剩余的.包含一个尺寸函数并撕掉尾部会更有意义.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读