2013-04-05 11 views
5

System.TypInfo.TPropInfoは(少なくともD-XE3で)2人の関数のメンバーを持っています。彼らは何であり、どのように使用することができますか? (希望が1つの質問に限定されることを期待してください)。文書化されていないメンバー

答えて

2

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の入力は、内部のShortStringの長さフィールドを指し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; 

shortstringsがNULL終端ではありませんので、ループの一種「ヌル文字が発見されるまでループ」は、簡単な操作を行うことはできません。
したがって、短い文字列を通常の文字列に変換するために、最初から最後までのループを使用できます。
実際のRTLソースコードでは不思議にも、長さバイトはtail関数の代わりにどこでも使用されます。それは残っているように見えます。
size機能を含めると、tailを取り除く方が意味があります。

関連する問題