2013-04-05 54 views
5

System.TypInfo.TPropInfo有兩個函數成員(至少在d-XE3):無證成員

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

我找不到他們或任何文件及其使用的任何例子。他們有什麼用途以及如何使用它們? (希望有資格作爲一個問題。)

回答

2

NameFld函數返回屬性的名稱,作爲TTypeInfoFieldAccessor

這可以讓你做到以下幾點:在內部一個shortstring屬性的

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

的TTypeInfoFieldAccessor商店名稱。
由於NextGen編譯器不支持短弦,因此使用PByte類型。
(我猜測作者不願與垃圾的的ifdef源和拆出來PShortstring引用)

Tail輸入是指向內部ShortString短的長度字段PBYTE。

這是tail的源代碼。

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不是空終止,你不能「直到空字符被發現循環」的循環方式做一個簡單的。
因此,可以使用從開始到尾部的循環將短弦轉換爲正常字符串。
奇怪的是,在實際的RTL源代碼中,長度字節被用在所有地方而不是tail函數;所以它看起來像一個剩餘的。
包含一個size函數和翻轉tail會更有意義。