mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-25 23:31:03 +02:00
+ initial check in
This commit is contained in:
parent
688ee84aa4
commit
bf2329a40f
532
docs/typinfo.tex
Normal file
532
docs/typinfo.tex
Normal file
@ -0,0 +1,532 @@
|
|||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
% The TYPINFO unit
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
\chapter{The TYPINFO unit}
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
% Constants, Types and variables
|
||||||
|
\section{Constants, Types and variables}
|
||||||
|
\subsection{Constants}
|
||||||
|
The following constants are used in the implementation section of the unit.
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
BooleanIdents: array[Boolean] of String = ('False', 'True');
|
||||||
|
DotSep: String = '.';
|
||||||
|
\end{verbatim}
|
||||||
|
The following constants determine the access method for the \var{Stored}
|
||||||
|
identifier of a property as used in the \var{PropProcs} field of the
|
||||||
|
\var{TPropInfo} record:
|
||||||
|
\begin{verbatim}
|
||||||
|
ptField = 0;
|
||||||
|
ptStatic = 1;
|
||||||
|
ptVirtual = 2;
|
||||||
|
ptConst = 3;
|
||||||
|
\end{verbatim}
|
||||||
|
The following typed constants are used for easy selection of property types.
|
||||||
|
\begin{verbatim}
|
||||||
|
tkAny = [Low(TTypeKind)..High(TTypeKind)];
|
||||||
|
tkMethods = [tkMethod];
|
||||||
|
tkProperties = tkAny-tkMethods-[tkUnknown];
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
\subsection{types}
|
||||||
|
The following pointer types are defined:
|
||||||
|
\begin{verbatim}
|
||||||
|
PShortString =^ShortString;
|
||||||
|
PByte =^Byte;
|
||||||
|
PWord =^Word;
|
||||||
|
PLongint =^Longint;
|
||||||
|
PBoolean =^Boolean;
|
||||||
|
PSingle =^Single;
|
||||||
|
PDouble =^Double;
|
||||||
|
PExtended =^Extended;
|
||||||
|
PComp =^Comp;
|
||||||
|
PFixed16 =^Fixed16;
|
||||||
|
Variant = Pointer;
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
The \var{TTypeKind} determines the type of a property:
|
||||||
|
\begin{verbatim}
|
||||||
|
TTypeKind = (tkUnknown,tkInteger,tkChar,tkEnumeration,
|
||||||
|
tkFloat,tkSet,tkMethod,tkSString,tkLString,tkAString,
|
||||||
|
tkWString,tkVariant,tkArray,tkRecord,tkInterface,
|
||||||
|
tkClass,tkObject,tkWChar,tkBool,tkInt64,tkQWord,
|
||||||
|
tkDynArray,tkInterfaceRaw);
|
||||||
|
tkString = tkSString;
|
||||||
|
\end{verbatim}
|
||||||
|
\var{tkString} is an alias that is introduced for Delphi compatibility.
|
||||||
|
|
||||||
|
If the property is and ordinal type, then \var{TTOrdType} determines the
|
||||||
|
size and sign of the ordinal type:
|
||||||
|
\begin{verbatim}
|
||||||
|
TTOrdType = (otSByte,otUByte,otSWord,otUWord,otSLong,otULong);
|
||||||
|
\end{verbatim}
|
||||||
|
The size of a float type is determined by \var{TFloatType}:
|
||||||
|
\begin{verbatim}
|
||||||
|
TFloatType = (ftSingle,ftDouble,ftExtended,ftComp,ftCurr,
|
||||||
|
ftFixed16,ftFixed32);
|
||||||
|
\end{verbatim}
|
||||||
|
A method property (e.g. an event) can have one of several types:
|
||||||
|
\begin{verbatim}
|
||||||
|
TMethodKind = (mkProcedure,mkFunction,mkConstructor,mkDestructor,
|
||||||
|
mkClassProcedure, mkClassFunction);
|
||||||
|
\end{verbatim}
|
||||||
|
The kind of parameter to a method is determined by \var{TParamFlags}:
|
||||||
|
\begin{verbatim}
|
||||||
|
TParamFlags = set of (pfVar,pfConst,pfArray,pfAddress,pfReference,pfOut);
|
||||||
|
\end{verbatim}
|
||||||
|
Interfaces are described further with \var{TntfFlags}:
|
||||||
|
\begin{verbatim}
|
||||||
|
TIntfFlags = set of (ifHasGuid,ifDispInterface,ifDispatch);
|
||||||
|
\end{verbatim}
|
||||||
|
The following defines a set of \var{TTypeKind}:
|
||||||
|
\begin{verbatim}
|
||||||
|
TTypeKinds = set of TTypeKind;
|
||||||
|
\end{verbatim}
|
||||||
|
The \var{TypeInfo} function returns a pointer to a \var{TTypeInfo} record:
|
||||||
|
\begin{verbatim}
|
||||||
|
TTypeInfo = record
|
||||||
|
Kind : TTypeKind;
|
||||||
|
Name : ShortString;
|
||||||
|
end;
|
||||||
|
PTypeInfo = ^TTypeInfo;
|
||||||
|
PPTypeInfo = ^PTypeInfo;
|
||||||
|
\end{verbatim}
|
||||||
|
Note that the Name is stored with as much bytes as needed to store the name,
|
||||||
|
it is not padded to 255 characters.
|
||||||
|
The type data immediatly follows the \var{TTypeInfo} record as a \var{TTypeData} record:
|
||||||
|
\begin{verbatim}
|
||||||
|
PTypeData = ^TTypeData;
|
||||||
|
TTypeData = packed record
|
||||||
|
case TTypeKind of
|
||||||
|
tkUnKnown,tkLString,tkWString,tkAString,tkVariant:
|
||||||
|
();
|
||||||
|
tkInteger,tkChar,tkEnumeration,tkWChar:
|
||||||
|
(OrdType : TTOrdType;
|
||||||
|
case TTypeKind of
|
||||||
|
tkInteger,tkChar,tkEnumeration,tkBool,tkWChar : (
|
||||||
|
MinValue,MaxValue : Longint;
|
||||||
|
case TTypeKind of
|
||||||
|
tkEnumeration: (
|
||||||
|
BaseType : PTypeInfo;
|
||||||
|
NameList : ShortString
|
||||||
|
)
|
||||||
|
);
|
||||||
|
tkSet: (
|
||||||
|
CompType : PTypeInfo
|
||||||
|
)
|
||||||
|
);
|
||||||
|
tkFloat: (
|
||||||
|
FloatType : TFloatType
|
||||||
|
);
|
||||||
|
tkSString:
|
||||||
|
(MaxLength : Byte);
|
||||||
|
tkClass:
|
||||||
|
(ClassType : TClass;
|
||||||
|
ParentInfo : PTypeInfo;
|
||||||
|
PropCount : SmallInt;
|
||||||
|
UnitName : ShortString
|
||||||
|
);
|
||||||
|
tkMethod:
|
||||||
|
(MethodKind : TMethodKind;
|
||||||
|
ParamCount : Byte;
|
||||||
|
ParamList : array[0..1023] of Char
|
||||||
|
{in reality ParamList is a array[1..ParamCount] of:
|
||||||
|
record
|
||||||
|
Flags : TParamFlags;
|
||||||
|
ParamName : ShortString;
|
||||||
|
TypeName : ShortString;
|
||||||
|
end;
|
||||||
|
followed by
|
||||||
|
ResultType : ShortString}
|
||||||
|
);
|
||||||
|
tkInt64:
|
||||||
|
(MinInt64Value, MaxInt64Value: Int64);
|
||||||
|
tkQWord:
|
||||||
|
(MinQWordValue, MaxQWordValue: QWord);
|
||||||
|
tkInterface:
|
||||||
|
();
|
||||||
|
end;
|
||||||
|
\end{verbatim}
|
||||||
|
If the typeinfo kind is \var{tkClass}, then the property
|
||||||
|
information follows the \var{UnitName} string, as an array of \var{TPropInfo} records.
|
||||||
|
|
||||||
|
The \var{TPropData} record is not used, but is provided for completeness.
|
||||||
|
\begin{verbatim}
|
||||||
|
TPropData = packed record
|
||||||
|
PropCount : Word;
|
||||||
|
PropList : record end;
|
||||||
|
end;
|
||||||
|
\end{verbatim}
|
||||||
|
The \var{TPropInfo} record describes one published property of a class:
|
||||||
|
\begin{verbatim}
|
||||||
|
PPropInfo = ^TPropInfo;
|
||||||
|
TPropInfo = packed record
|
||||||
|
PropType : PTypeInfo;
|
||||||
|
GetProc : Pointer;
|
||||||
|
SetProc : Pointer;
|
||||||
|
StoredProc : Pointer;
|
||||||
|
Index : Integer;
|
||||||
|
Default : Longint;
|
||||||
|
NameIndex : SmallInt;
|
||||||
|
PropProcs : Byte;
|
||||||
|
Name : ShortString;
|
||||||
|
end;
|
||||||
|
\end{verbatim}
|
||||||
|
The \var{Name} field is stored not with 255 characters, but with just as many characters
|
||||||
|
as required to store the name.
|
||||||
|
\begin{verbatim}
|
||||||
|
TProcInfoProc = procedure(PropInfo : PPropInfo) of object;
|
||||||
|
\end{verbatim}
|
||||||
|
The following pointer and array types are used for typecasts:
|
||||||
|
\begin{verbatim}
|
||||||
|
PPropList = ^TPropList;
|
||||||
|
TPropList = array[0..65535] of PPropInfo;
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
% Functions and procedures
|
||||||
|
\section{Functions and Procedures}
|
||||||
|
|
||||||
|
\begin{function}{GetTypeData}
|
||||||
|
\Declaration
|
||||||
|
Function GetTypeData(TypeInfo : PTypeInfo) : PTypeData;
|
||||||
|
\Description
|
||||||
|
\var{GetTypeData} returns a pointer to the \var{TTypeData} record that
|
||||||
|
follows after the \var{TTypeInfo} record pointed to by \var{TypeInfo}.
|
||||||
|
It essentially skips the \var{Kind} and \var{Name} fields in the
|
||||||
|
\var{TTypeInfo} record.
|
||||||
|
\Errors
|
||||||
|
None.
|
||||||
|
\SeeAlso
|
||||||
|
\end{function}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{function}{GetPropInfo}
|
||||||
|
\Declaration
|
||||||
|
function GetPropInfo(TypeInfo: PTypeInfo;
|
||||||
|
const PropName: string) : PPropInfo;
|
||||||
|
\Description
|
||||||
|
\var{GetPropInfo} returns a pointer to the \var{TPropInfo} record for a the \var{PropName}
|
||||||
|
property of a class that has \var{TypeInfo} as class info.
|
||||||
|
\Errors
|
||||||
|
If the property \var{PropName} does not exist, \var{Nil} is returned.
|
||||||
|
\SeeAlso
|
||||||
|
\seep{GetPropInfos},\seef{GetPropList}
|
||||||
|
\end{function}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{procedure}{GetPropInfos}
|
||||||
|
\Declaration
|
||||||
|
Procedure GetPropInfos(TypeInfo: PTypeInfo;PropList: PPropList);
|
||||||
|
\Description
|
||||||
|
\var{GetPropInfos} stores pointers to the property information of all published
|
||||||
|
properties of a class with class info \var{TypeInfo} in the list pointed to by
|
||||||
|
\var{Proplist}. The \var{PropList} pointer must point to a memory location that
|
||||||
|
contains enough space to hold all properties of the class and its parent classes.
|
||||||
|
\Errors
|
||||||
|
No checks are done to see whether \var{PropList} points to a memory area that
|
||||||
|
is big enough to hold all pointers.
|
||||||
|
\SeeAlso
|
||||||
|
\seef{GetPropInfo},\seef{GetPropList}
|
||||||
|
\end{procedure}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{function}{GetPropList}
|
||||||
|
\Declaration
|
||||||
|
Function GetPropList(TypeInfo : PTypeInfo;
|
||||||
|
TypeKinds : TTypeKinds;
|
||||||
|
PropList : PPropList) : Integer;
|
||||||
|
\Description
|
||||||
|
\var{GetPropList} stores pointers to property information of the class with class
|
||||||
|
info \var{TypeInfo} for properties of kind \var{TypeKinds} in the list pointed to
|
||||||
|
by \var{Proplist}. \var{PropList} must contain enough space to hold all properties.
|
||||||
|
|
||||||
|
The function returns the number of pointers that matched the criteria and were stored
|
||||||
|
in \var{PropList}.
|
||||||
|
\Errors
|
||||||
|
No checks are done to see whether \var{PropList} points to a memory area that is big enough
|
||||||
|
to hold all pointers.
|
||||||
|
\SeeAlso
|
||||||
|
\seep{GetPropInfos}, \seef{GetPropInfo}
|
||||||
|
\end{function}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{function}{IsStoredProp}
|
||||||
|
\Declaration
|
||||||
|
Function IsStoredProp(Instance : TObject;PropInfo : PPropInfo) : Boolean;
|
||||||
|
\Description
|
||||||
|
\var{IsStoredProp} returns \var{True} if the \var{Stored} modifier evaluates
|
||||||
|
to \var{True} for the property described by \var{PropInfo} for object
|
||||||
|
\var{Instance}. It returns \var{False} otherwise. If the function returns
|
||||||
|
\var{True}, this indicates that the property should be written when
|
||||||
|
streaming the object \var{Instance}.
|
||||||
|
|
||||||
|
If there was no \var{stored} modifier in the declaration of the property,
|
||||||
|
\var{True} will be returned.
|
||||||
|
\Errors
|
||||||
|
No checking is done whether \var{Instance} is non-nil, or whether
|
||||||
|
\var{PropInfo} describes a valid property of \var{Instance}.
|
||||||
|
\SeeAlso
|
||||||
|
\end{function}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{function}{GetOrdProp}
|
||||||
|
\Declaration
|
||||||
|
Function GetOrdProp(Instance : TObject;PropInfo : PPropInfo) : Longint;
|
||||||
|
\Description
|
||||||
|
\var{GetOrdProp} returns the value of the ordinal property described by
|
||||||
|
\var{PropInfo} for the object \var{Instance}. The value is returned as a
|
||||||
|
longint, which should be typecasted to the needed type.
|
||||||
|
|
||||||
|
Ordinal properties that can be retrieved include:
|
||||||
|
\begin{description}
|
||||||
|
\item[Integers and subranges of integers] The value of the integer will be
|
||||||
|
returned.
|
||||||
|
\item[Enumerated types and subranges of enumerated types] The ordinal value
|
||||||
|
of the enumerated type will be returned.
|
||||||
|
\item[Sets] If the base type of the set has less than 31 possible values.
|
||||||
|
If a bit is set in the return value, then the corresponding element of the
|
||||||
|
base ordinal class of the set type must be included in the set.
|
||||||
|
\end{description}
|
||||||
|
\Errors
|
||||||
|
No checking is done whether \var{Instance} is non-nil, or whether
|
||||||
|
\var{PropInfo} describes a valid ordinal property of \var{Instance}
|
||||||
|
\SeeAlso
|
||||||
|
\seep{SetOrdProp}, \seef{GetStrProp}, \seef{GetFloatProp},
|
||||||
|
\seef{GetInt64Prop},\seef{GetMethodProp}
|
||||||
|
|
||||||
|
\end{function}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{procedure}{SetOrdProp}
|
||||||
|
\Declaration
|
||||||
|
Procedure SetOrdProp(Instance : TObject;PropInfo : PPropInfo; Value : Longint);
|
||||||
|
\Description
|
||||||
|
\var{SetOrdProp} assigns \var{Value} to the the ordinal property described by
|
||||||
|
\var{PropInfo} for the object \var{Instance}.
|
||||||
|
|
||||||
|
Ordinal properties that can be set include:
|
||||||
|
\begin{description}
|
||||||
|
\item[Integers and subranges of integers] The actual value of the integer must be
|
||||||
|
passed.
|
||||||
|
\item[Enumerated types and subranges of enumerated types] The ordinal value
|
||||||
|
of the enumerated type must be passed.
|
||||||
|
\item[Subrange types] of integers or enumerated types. Here the ordinal
|
||||||
|
value must be passed.
|
||||||
|
\item[Sets] If the base type of the set has less than 31 possible values.
|
||||||
|
For each possible value; the corresponding bit of \var{Value} must be set.
|
||||||
|
\end{description}
|
||||||
|
\Errors
|
||||||
|
No checking is done whether \var{Instance} is non-nil, or whether
|
||||||
|
\var{PropInfo} describes a valid ordinal property of \var{Instance}.
|
||||||
|
No range checking is performed.
|
||||||
|
\SeeAlso
|
||||||
|
\seef{GetOrdProp}, \seep{SetStrProp}, \seep{SetFloatProp},
|
||||||
|
\seep{SetInt64Prop},\seep{SetMethodProp}
|
||||||
|
\end{procedure}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{function}{GetStrProp}
|
||||||
|
\Declaration
|
||||||
|
Function GetStrProp(Instance : TObject;PropInfo : PPropInfo) : Ansistring;
|
||||||
|
\Description
|
||||||
|
\var{GetStrProp} returns the value of the string property described by
|
||||||
|
\var{PropInfo} for object \var{Instance}.
|
||||||
|
\Errors
|
||||||
|
No checking is done whether \var{Instance} is non-nil, or whether
|
||||||
|
\var{PropInfo} describes a valid string property of \var{Instance}.
|
||||||
|
\SeeAlso
|
||||||
|
\seep{SetStrProp}, \seef{GetOrdProp}, \seef{GetFloatProp},
|
||||||
|
\seef{GetInt64Prop},\seef{GetMethodProp}
|
||||||
|
\end{function}
|
||||||
|
|
||||||
|
\begin{procedure}{SetStrProp}
|
||||||
|
\Declaration
|
||||||
|
procedure SetStrProp(Instance : TObject;PropInfo : PPropInfo;
|
||||||
|
const Value : Ansistring);
|
||||||
|
\Description
|
||||||
|
\var{GetStrProp} assigns \var{Value} to the string property described by
|
||||||
|
\var{PropInfo} for object \var{Instance}.
|
||||||
|
\Errors
|
||||||
|
No checking is done whether \var{Instance} is non-nil, or whether
|
||||||
|
\var{PropInfo} describes a valid string property of \var{Instance}.
|
||||||
|
\SeeAlso
|
||||||
|
\seef{GetStrProp}, \seep{SetOrdProp}, \seep{SetFloatProp},
|
||||||
|
\seep{SetInt64Prop},\seep{SetMethodProp}
|
||||||
|
|
||||||
|
|
||||||
|
\end{procedure}
|
||||||
|
|
||||||
|
\begin{function}{GetFloatProp}
|
||||||
|
\Declaration
|
||||||
|
Function GetFloatProp(Instance : TObject;PropInfo : PPropInfo) : Extended;
|
||||||
|
\Description
|
||||||
|
\var{GetFloatProp} returns the value of the float property described by
|
||||||
|
\var{PropInfo} for the object \var{Instance}. All float types are converted
|
||||||
|
to extended.
|
||||||
|
\Errors
|
||||||
|
No checking is done whether \var{Instance} is non-nil, or whether
|
||||||
|
\var{PropInfo} describes a valid float property of \var{Instance}.
|
||||||
|
\SeeAlso
|
||||||
|
\seep{SetFloatProp}, \seef{GetOrdProp}, \seef{GetStrProp},
|
||||||
|
\seef{GetInt64Prop},\seef{GetMethodProp}
|
||||||
|
\end{function}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{procedure}{SetFloatProp}
|
||||||
|
\Declaration
|
||||||
|
Procedure SetFloatProp(Instance : TObject;
|
||||||
|
PropInfo : PPropInfo;
|
||||||
|
Value : Extended);
|
||||||
|
\Description
|
||||||
|
\var{SetFloatProp} assigns \var{Value} to the property described by
|
||||||
|
\var{PropInfo} for the object \var{Instance}.
|
||||||
|
\Errors
|
||||||
|
No checking is done whether \var{Instance} is non-nil, or whether
|
||||||
|
\var{PropInfo} describes a valid float property of \var{Instance}.
|
||||||
|
\SeeAlso
|
||||||
|
\seef{GetFloatProp}, \seep{SetOrdProp}, \seep{SetStrProp},
|
||||||
|
\seep{SetInt64Prop},\seep{SetMethodProp}
|
||||||
|
|
||||||
|
\end{procedure}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{function}{GetVariantProp}
|
||||||
|
\Declaration
|
||||||
|
Function GetVariantProp(Instance : TObject;PropInfo : PPropInfo): Variant;
|
||||||
|
\Description
|
||||||
|
Not yet implemented. Provided for Delphi compatibility only.
|
||||||
|
\Errors
|
||||||
|
\SeeAlso
|
||||||
|
\end{function}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{procedure}{SetVariantProp}
|
||||||
|
\Declaration
|
||||||
|
Procedure SetVariantProp(Instance : TObject;
|
||||||
|
PropInfo : PPropInfo;
|
||||||
|
Const Value: Variant);
|
||||||
|
\Description
|
||||||
|
Not yet implemented. Provided for Delphi compatibility only.
|
||||||
|
\Errors
|
||||||
|
\SeeAlso
|
||||||
|
\end{procedure}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{function}{GetMethodProp}
|
||||||
|
\Declaration
|
||||||
|
Function GetMethodProp(Instance : TObject;PropInfo : PPropInfo) : TMethod;
|
||||||
|
\Description
|
||||||
|
\var{GetMethodProp} returns the method the property described by
|
||||||
|
\var{PropInfo} for object \var{Instance}.
|
||||||
|
The return type \var{TMethod} is defined in the \file{SysUtils} unit as:
|
||||||
|
\begin{verbatim}
|
||||||
|
TMethod = packed record
|
||||||
|
Code, Data: Pointer;
|
||||||
|
end;
|
||||||
|
\end{verbatim}
|
||||||
|
\var{Data} points to the instance of the class with the method \var{Code}.
|
||||||
|
|
||||||
|
\Errors
|
||||||
|
No checking is done whether \var{Instance} is non-nil, or whether
|
||||||
|
\var{PropInfo} describes a valid method property of \var{Instance}.
|
||||||
|
\SeeAlso
|
||||||
|
\seep{SetMethodProp}, \seef{GetOrdProp}, \seef{GetStrProp},
|
||||||
|
\seef{GetFloatProp}, \seef{GetInt64Prop}
|
||||||
|
\end{function}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{procedure}{SetMethodProp}
|
||||||
|
\Declaration
|
||||||
|
Procedure SetMethodProp(Instance : TObject;PropInfo : PPropInfo; const Value : TMethod);
|
||||||
|
\Description
|
||||||
|
\var{SetMethodProp} assigns \var{Value} to the method the property described
|
||||||
|
by \var{PropInfo} for object \var{Instance}.
|
||||||
|
|
||||||
|
The type \var{TMethod} of the \var{Value} parameter is defined in the
|
||||||
|
\file{SysUtils} unit as:
|
||||||
|
\begin{verbatim}
|
||||||
|
TMethod = packed record
|
||||||
|
Code, Data: Pointer;
|
||||||
|
end;
|
||||||
|
\end{verbatim}
|
||||||
|
\var{Data} should point to the instance of the class with the method \var{Code}.
|
||||||
|
|
||||||
|
\Errors
|
||||||
|
No checking is done whether \var{Instance} is non-nil, or whether
|
||||||
|
\var{PropInfo} describes a valid method property of \var{Instance}.
|
||||||
|
\SeeAlso
|
||||||
|
\seef{GetMethodProp}, \seep{SetOrdProp}, \seep{SetStrProp},
|
||||||
|
\seep{SetFloatProp}, \seep{SetInt64Prop}
|
||||||
|
\end{procedure}
|
||||||
|
|
||||||
|
\begin{function}{GetInt64Prop}
|
||||||
|
\Declaration
|
||||||
|
Function GetInt64Prop(Instance: TObject; PropInfo: PPropInfo): Int64;
|
||||||
|
\Description
|
||||||
|
\var{GetInt64Prop} returns the value of the property of type
|
||||||
|
\var{Int64} that is described by \var{PropInfo} for the object
|
||||||
|
\var{Instance}.
|
||||||
|
|
||||||
|
\Errors
|
||||||
|
No checking is done whether \var{Instance} is non-nil, or whether
|
||||||
|
\var{PropInfo} describes a valid \var{Int64} property of \var{Instance}.
|
||||||
|
\SeeAlso
|
||||||
|
\seep{SetInt64Prop}, \seef{GetOrdProp}, \seef{GetStrProp},
|
||||||
|
\seef{GetFloatProp}, \seef{GetMethodProp}
|
||||||
|
|
||||||
|
\end{function}
|
||||||
|
|
||||||
|
\begin{procedure}{SetInt64Prop}
|
||||||
|
\Declaration
|
||||||
|
Procedure SetInt64Prop(Instance: TObject; PropInfo: PPropInfo; const Value: Int64);
|
||||||
|
\Description
|
||||||
|
\var{SetInt64Prop} assigns \var{Value} to the property of type
|
||||||
|
\var{Int64} that is described by \var{PropInfo} for the object
|
||||||
|
\var{Instance}.
|
||||||
|
\Errors
|
||||||
|
No checking is done whether \var{Instance} is non-nil, or whether
|
||||||
|
\var{PropInfo} describes a valid \var{Int64} property of \var{Instance}.
|
||||||
|
\SeeAlso
|
||||||
|
\seef{GetInt64Prop}, \seef{GetMethodProp}, \seep{SetOrdProp}, \seep{SetStrProp},
|
||||||
|
\seep{SetFloatProp}
|
||||||
|
\end{procedure}
|
||||||
|
|
||||||
|
\begin{function}{GetEnumName}
|
||||||
|
\Declaration
|
||||||
|
Function GetEnumName(TypeInfo : PTypeInfo;Value : Integer) : string;
|
||||||
|
\Description
|
||||||
|
\var{GetEnumName} scans the type information for the enumeration type
|
||||||
|
desribed by \var{TypeInfo} and returns the name of the enumeration
|
||||||
|
constant for the element with ordinal value equal to \var{Value}.
|
||||||
|
|
||||||
|
If \var{Value} is out of range, the first element of the enumeration type
|
||||||
|
is returned. The result is lowercased, but this may change in the future.
|
||||||
|
|
||||||
|
This can be used in combination with \var{GetOrdProp} to stream a property
|
||||||
|
of an enumerated type.
|
||||||
|
\Errors
|
||||||
|
No check is done whether \var{TypeInfo} points to the type information
|
||||||
|
for an enumerated type.
|
||||||
|
\SeeAlso
|
||||||
|
\seef{GetOrdProp}, \seef{GetEnumValue}
|
||||||
|
\end{function}
|
||||||
|
|
||||||
|
\begin{function}{GetEnumValue}
|
||||||
|
\Declaration
|
||||||
|
Function GetEnumValue(TypeInfo : PTypeInfo;const Name : string) : Integer;
|
||||||
|
\Description
|
||||||
|
\var{GetEnumValue} scans the type information for the enumeration type
|
||||||
|
described by \var{TypeInfor} and returns the ordinal value for the element
|
||||||
|
in the enumerated type that has identifier \var{Name}. The identifier is
|
||||||
|
searched in a case-insensitive manner.
|
||||||
|
|
||||||
|
This can be used to set the value of enumerated properties from a stream.
|
||||||
|
\Errors
|
||||||
|
If \var{Name} is not found in the list of enumerated values, then -1 is
|
||||||
|
returned. No check is done whether \var{TypeInfo} points to the type information
|
||||||
|
for an enumerated type.
|
||||||
|
\SeeAlso
|
||||||
|
\seef{GetEnumName}, \seep{SetOrdProp}
|
||||||
|
\end{function}
|
Loading…
Reference in New Issue
Block a user