2013-04-05 11 views
5

System.TypInfo.TPropInfo ma dwóch członków funkcyjnych (przynajmniej w D-XE3)Nielegalni Członkowie TPropInfo

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

nie mogę znaleźć żadnej dokumentacji dla nich lub z przykładami ich użycia. Po co one są i jak można je wykorzystać? (Nadzieję, że kwalifikuje się jako jedno pytanie.)

Odpowiedz

2

Funkcja NameFld zwraca nazwę właściwości jako TTypeInfoFieldAccessor.

ta pozwala na wykonanie następujących czynności:

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

przechowuje TTypeInfoFieldAccessor nazwa własności w shortstring wewnętrznie.
Ponieważ kompilator NextGen nie obsługuje skrótów, używany jest typ .
(Myślę, że autor nie chciał miotu źródło z ifdefs i wyrwane odniesień PShortstring)

Wejście Tail jest PByte wskazując na długość pola wewnętrznego shortstring.

Oto kod źródłowy ogona.

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; 

Ponieważ shortstrings nie są NULL zakończone, nie można zrobić prosty „pętlę aż null char znajduje się” rodzaj pętli.
W związku z tym można użyć pętli od początku do końca, aby przenieść skrót na normalny ciąg.
Co dziwne w rzeczywistym kodzie źródłowym RTL, bajt długości jest używany wszędzie zamiast funkcji tail; więc wygląda na resztkę.
Byłoby bardziej sensowne włączenie funkcji size i wyrwanie tail.

Powiązane problemy