99 lines
3.6 KiB
C
99 lines
3.6 KiB
C
|
|
// _RTTIBaseClassDescriptor
|
|
|
|
// TypeDescriptor is declared in ehdata.h
|
|
|
|
typedef const struct _s_RTTIBaseClassDescriptor {
|
|
TypeDescriptor *pTypeDescriptor;
|
|
DWORD numContainedBases;
|
|
PMD where;
|
|
DWORD attributes;
|
|
} _RTTIBaseClassDescriptor;
|
|
|
|
#define BCD_NOTVISIBLE 0x00000001
|
|
#define BCD_AMBIGUOUS 0x00000002
|
|
#define BCD_PRIVORPROTINCOMPOBJ 0x00000004
|
|
#define BCD_PRIVORPROTBASE 0x00000008
|
|
#define BCD_VBOFCONTOBJ 0x00000010
|
|
#define BCD_NONPOLYMORPHIC 0x00000020
|
|
|
|
#define BCD_PTD(bcd) ((bcd).pTypeDescriptor)
|
|
#define BCD_NUMCONTBASES(bcd) ((bcd).numContainedBases)
|
|
#define BCD_WHERE(bcd) ((bcd).where)
|
|
#define BCD_ATTRIBUTES(bcd) ((bcd).attributes)
|
|
|
|
|
|
|
|
// _RTTIBaseClassArray
|
|
|
|
#pragma warning(disable:4200) // get rid of obnoxious nonstandard extension warning
|
|
typedef const struct _s_RTTIBaseClassArray {
|
|
_RTTIBaseClassDescriptor *arrayOfBaseClassDescriptors[];
|
|
} _RTTIBaseClassArray;
|
|
#pragma warning(default:4200)
|
|
|
|
|
|
|
|
// _RTTIClassHierarchyDescriptor
|
|
|
|
typedef const struct _s_RTTIClassHierarchyDescriptor {
|
|
DWORD signature;
|
|
DWORD attributes;
|
|
DWORD numBaseClasses;
|
|
_RTTIBaseClassArray *pBaseClassArray;
|
|
} _RTTIClassHierarchyDescriptor;
|
|
|
|
#define CHD_MULTINH 0x00000001
|
|
#define CHD_VIRTINH 0x00000002
|
|
#define CHD_AMBIGUOUS 0x00000004
|
|
|
|
#define CHD_SIGNATURE(chd) ((chd).signature)
|
|
#define CHD_ATTRIBUTES(chd) ((chd).attributes)
|
|
#define CHD_NUMBASES(chd) ((chd).numBaseClasses)
|
|
#define CHD_PBCA(chd) ((chd).pBaseClassArray)
|
|
|
|
|
|
// _RTTICompleteObjectLocator
|
|
|
|
typedef const struct _s_RTTICompleteObjectLocator {
|
|
DWORD signature;
|
|
DWORD offset;
|
|
DWORD cdOffset;
|
|
TypeDescriptor *pTypeDescriptor;
|
|
_RTTIClassHierarchyDescriptor *pClassDescriptor;
|
|
} _RTTICompleteObjectLocator;
|
|
|
|
#define COL_SIGNATURE(col) ((col).signature)
|
|
#define COL_OFFSET(col) ((col).offset)
|
|
#define COL_CDOFFSET(col) ((col).cdOffset)
|
|
#define COL_PTD(col) ((col).pTypeDescriptor)
|
|
#define COL_PCHD(col) ((col).pClassDescriptor)
|
|
|
|
#ifdef BUILDING_TYPESRC_C
|
|
|
|
// Type of the result of __RTtypeid and internal applications of typeid().
|
|
// This also introduces the tag "type_info" as an incomplete type.
|
|
|
|
|
|
typedef const class type_info &__RTtypeidReturnType;
|
|
|
|
|
|
// Declaration of CRT entrypoints, as seen by the compiler. Types are
|
|
// simplified so as to avoid type matching hassles.
|
|
|
|
|
|
// Perform a dynamic_cast on obj. of polymorphic type
|
|
extern "C" PVOID __cdecl __RTDynamicCast (
|
|
PVOID, // ptr to vfptr
|
|
LONG, // offset of vftable
|
|
PVOID, // src type
|
|
PVOID, // target type
|
|
BOOL); // isReference
|
|
|
|
// Perform 'typeid' on obj. of polymorphic type
|
|
extern "C" PVOID __cdecl __RTtypeid (PVOID); // ptr to vfptr
|
|
|
|
// Perform a dynamic_cast from obj. of polymorphic type to void*
|
|
extern "C" PVOID __cdecl __RTCastToVoid (PVOID); // ptr to vfptr
|
|
#endif
|