美文网首页
System - C++ Builder

System - C++ Builder

作者: 玄坴 | 来源:发表于2022-04-12 10:02 被阅读0次

    C++ Builder 参考手册System


    • System 类/类型
      • 基础类
      • 基本数据类型
      • 字符/字符串数据类型
      • 日期/时间类型
      • RTTI类型
      • 接口类型
      • 模块/内存管理
      • 其他数据类型
    • System 常数
      • Variant 的类型 (TVarType TVarData::VType)
      • Variant 类型的操作符类型 (TVarOp)
      • TVarRec 的类型 (TVarRec::VType)
      • TTypeKind 的某些枚举值的别名
      • TTextRec::Mode 的值
      • 虚函数表 (Virtual Method Table)
      • Test8086 的值
      • 浮点数异常处理
      • 未分类常数
    • System 变量
      • 处理器相关的全局变量
      • 异常处理相关的全局变量
      • 处理 Variant 内部使用的函数指针
      • 未分类的全局变量
    • System 宏
    • System 函数
      • 资源相关的函数
      • 内存管理相关的函数
      • 错误及异常处理相关的函数
      • 字符串处理函数
      • 文件处理函数
      • 动态数组相关的函数
      • 浮点数处理及数学运算函数
      • 未分类的函数

    头文件:#include <System.hpp>
    命名空间:System
    VCL 和 FMX 项目都默认包含了这个头文件,可以直接使用里面的内容。


    一. System 类/类型

    1.1 基础类

    说明
    TObject 所有的 VCL 和 FMX 控件的顶级父类
    TAggregatedObject 用于几个接口的组合,共用一个引用计数
    TContainedObject 用于实现被包含的接口的父类
    TInterfacedObject VCL/FMX 里面需要 IInterface 接口的一些类的公共父类
    TCppAggregatedObject 实现了 IUnknown 的 TAggregatedObject
    TCppInterfacedObject 不使用 lambda 表达式实现 Delphi 匿名函数的接口

    1.2 基本数据类型

    类型 对应的 C++ 类型 说明
    Boolean bool false, true
    ByteBool unsigned char 一个字节的布尔类型
    WordBool unsigned short 两个字节的布尔类型
    LongBool int 四个字节的布尔类型
    Shortint signed char -128 ~ 127
    ShortInt signed char -128 ~ 127
    Byte unsigned char 0 ~ 255
    Smallint short -32768 ~ 32767
    SmallInt short -32768 ~ 32767
    Word unsigned short 0 ~ 65535
    DWord unsigned long 0 ~ 4294967295
    Integer int -2147483648 ~ 2147483647
    Cardinal unsigned int 0 ~ 4294967295
    LongWord unsigned long
    unsigned
    0 ~ 18446744073709551615 (IOS64/Android64)
    0 ~ 4294967295 (其他系统)
    Longint long
    int
    -9223372036854775808 ~ 9223372036854775807 (IOS64/Android64)
    -2147483648 ~ 2147483647 (其他系统)
    LongInt long
    int
    -9223372036854775808 ~ 9223372036854775807 (IOS64/Android64)
    -2147483648 ~ 2147483647 (其他系统)
    Int8 signed char -128 ~ 127
    UInt8 unsigned char 0 ~ 255
    Int16 short -32768 ~ 32767
    UInt16 unsigned short 0 ~ 65535
    Int32 int -2147483648 ~ 2147483647
    UInt32 unsigned int 0 ~ 4294967295
    IntPtr std::intptr_t 整数,32位系统32位,64位系统64位
    UIntPtr std::uintptr_t 无符号整数,32位系统32位,64位系统64位
    NativeInt std::intptr_t 整数,32位系统32位,64位系统64位
    NativeUInt std::uintptr_t 无符号整数,32位系统32位,64位系统64位
    Single float 单精度浮点数 (32位)
    Double double 双精度浮点数 (64位)
    Extended long double 长双精度浮点数 (64位/80位)
    Win32是80位,Win64是64位 (变少了)
    Pointer void * 指针
    PPointer Pointer * 指向指针的指针
    PointerArray void * 指针
    PPointerArray PointerArray * PointerArray 指针
    PSingle float * 单精度浮点数指针
    PDouble double * 双精度浮点数指针
    PExtended long double * 长双精度浮点数指针
    PBoolean bool * 布尔指针
    PWordBool WordBool * WordBool 指针
    PByte unsigned char * 字节指针
    PSmallInt short * 十六位整数指针
    PWord unsigned short * Word 指针
    PInteger int * 整数指针
    IntegerArray int * 整数指针
    PIntegerArray IntegerArray * IntegerArray 指针
    PCardinal unsigned int * Cardinal 指针
    PError unsigned int * 用于处理 Variant 出错信息的无符号整数指针
    PLongBool LongBool * LongBool 指针
    PLongWord LongWord * LongWord 指针
    PLongInt LongInt * LongInt 指针
    PLongint Longint * Longint 指针
    PInt64 __int64 * 64位整数指针
    PUInt64 unsigned __int64 * UInt64 指针
    Int64Array __int64 * 64位整数指针
    PInt64Array Int64Array * Int64Array 指针
    PNativeInt NativeInt * NativeInt 指针
    PNativeUInt NativeUInt * NativeUInt 指针
    PFixedInt int * int 指针
    PFixedUInt unsigned * unsigned int 指针

    1.3 字符/字符串数据类型

    类型 对应的 C++ 类型 说明
    AnsiChar char 组成 ANSI 编码的1个字节的字符
    UTF8Char char 组成 UTF-8 编码的1个字节的字符
    WideChar char16_t
    wchar_t
    组成 UTF-16 编码的2个字节的字符
    Windows 系统里面是 wchar_t 其他系统是 char16_t
    UCS2Char WideChar 组成 UTF-16 编码的2个字节的字符
    UCS4Char unsigned int 组成 UTF-32 编码的4个字节的字符 (0 ~ 4294967295)
    (没有定义成 char32_t,只用作编码转换)
    Char WideChar
    AnsiChar
    UNICODE 版本相当于 WideChar
    ANSI 版本相当于 AnsiChar
    _DCHAR WideChar
    AnsiChar
    UNICODE 版本相当于 WideChar
    ANSI 版本相当于 AnsiChar
    PChar char16_t * / wchar_t *
    char *
    UNICODE 版本是 UTF-16 字符指针
    ANSI 版本是 ANSI 字符指针
    PPChar PChar * 指向字符指针的指针
    TPCharArray PChar Char 指针
    PPCharArray TPCharArray * TPCharArray 指针
    PAnsiChar char * ANSI 字符指针
    PPAnsiChar char * * ANSI 字符指针的指针
    PUTF8Char char * UTF-8 字符指针
    PWideChar char16_t * / wchar_t * UTF-16 字符指针
    PPWideChar WideChar * * UTF-16 字符指针的指针
    PUCS2Char WideChar * UTF-32 字符指针
    PUCS4Char UCS4Char * UTF-32 字符指针,相当于 unsigned int *
    (没有定义成 char32_t *,只用作编码转换)
    TUCS4CharArray UCS4Char * UCS4Char 指针
    PUCS4CharArray TUCS4CharArray * TUCS4CharArray 指针
    UCS4String DynamicArray<UCS4Char> 32位整数动态数组,用于 UTF-32 编码转换
    _PPAnsiChar char ** (仅 Android 系统)
    Openstring char* const 指向字符的常数指针
    String UnicodeString UTF-16 编码的字符串
    AnsiStringBase 所有以 char 编码的字符串的顶级父类
    AnsiStringT 参数为代码页的以 char 编码的字符串类模板
    AnsiString 代码页为 0,即本地 ANSI 编码的字符串
    RawByteString 代码页为 65535,即不解析编码的字符串
    PRawByteString RawByteString * RawByteString 指针
    UTF8String 代码页为 65001,即 UTF-8 编码的字符串
    PUTF8String UTF8String * UTF8String 指针
    UnicodeString UTF-16 编码的字符串
    WideString 封装 Windows BSTR 类型的字符串
    SmallStringBase 最多255个字符的字符串类模板顶级父类,
    只有一个保存长度的整数和一个字符数组成员
    SmallString 最多255个字符的字符串类模板,
    从 SmallStringBase 继承,实现一些简单的字符串操作
    ShortStringBase SmallStringBase<255> 最多 255 个字符的字符串
    ShortString SmallString<255> 最多 255 个字符的字符串
    PShortString ShortString * ShortString 指针
    PAnsiString AnsiString * AnsiString 指针
    PUnicodeString UnicodeString * UnicodeString 指针
    PString String * String 指针
    PWideString WideString * WideString 指针

    1.4 日期/时间类型

    类型 对应的 C++ 类型 说明
    TDateTimeBase 日期时间类型的父类
    TDateTime 日期时间类型
    TDate TDateTime 日期类型
    TTime TDateTime 时间类型
    PDate double * 用于表示日期时间的双精度浮点数指针
    PDateTime TDateTime * 日期时间类型指针

    1.5 RTTI类型

    类型 对应的 C++ 类型 说明
    DelphiMetaClass 用于使用 TMetaClass 定义类型
    System__1 用于定义 TVisibilityClasses 类型
    TCustomAttribute 用于 RTTI 的属性成员
    TClass TMetaClass * TMetaClass 指针
    TInterfacedClass TMetaClass * TInterfacedObject 的 RTTI 类信息
    TMetaClass 用于定义支持 RTTI 的类型
    TVisibilityClasses 成员的访问权限,用于 RTTI 枚举类的成员

    1.6 接口类型

    类型 对应的 C++ 类型 说明
    __dispinterface class 用于接口定义,相当于 class
    __interface struct 用于接口定义,相当于 struct
    __safecall __stdcall 兼容 Delphi 的 safecall
    _di_IComparable IComparable 智能接口指针类型
    _di_IComparable__1 IComparable__1 智能接口指针类型
    _di_IDispatch IDispatch 智能接口指针类型
    _di_IEnumerable IEnumerable 智能接口指针类型
    _di_IEnumerable__1 IEnumerable__1 智能接口指针类型
    _di_IEnumerator IEnumerator 智能接口指针
    _di_IEnumerator__1 IEnumerator__1 智能接口指针
    _di_IEquatable__1 IEquatable__1 智能接口指针
    _di_IInterface System::IInterface 智能接口指针类型
    _di_IUnknown IUnknown 智能接口指针类型
    DelphiInterface Delphi 匿名函数 / lambda 表达式接口
    IComparable 用于比较大小的接口类型
    IComparable__1 用于比较大小的接口类型,有 1 个模板参数
    IEnumerable 用于枚举信息的接口
    IEnumerable__1 用于枚举信息的接口,有 1 个模板参数
    IEnumerator 继承 IInterface 的子类,用于枚举容器里面的内容,通过容器的 GetEnumerator 方法获取
    IEnumerator__1 继承 IEnumerator 的模板,通过模板参数指定枚举内容的类型
    IEquatable__1 用户检测两个对象相等的接口类型
    IInterface 增加了获取智能接口的 IUnknown
    IInvokable 支持 RTTI 的接口的父类接口
    PInterfaceEntry TInterfaceEntry * TInterfaceEntry 指针
    PInterfaceTable TInterfaceTable * TInterfaceTable 指针
    PUnknown _di_IInterface * _di_IInterface 指针
    PPUnknown PUnknown * PUnknown 指针
    TInterfaceEntry 用于保存分配接口调用所需的信息
    TInterfaceTable TInterfaceEntry 数组

    1.7 模块/内存管理

    类型 对应的 C++ 类型 说明
    GetPackageInfoTable PackageInfo
    __fastcall (*)(void)
    返回 PackageInfo 的无参数的函数指针
    PackageInfo PackageInfoTable * PackageInfoTable 指针
    PackageInfoTable 组件包单元初始化和结束时使用的信息类型
    PackageUnitEntry 组件包单元初始化和结束时使用的信息类型
    PLibModule TLibModule 指针
    PMemoryManager TMemoryManager 指针
    PMemoryManagerEx TMemoryManagerEx 指针
    PModuleUnloadRec TModuleUnloadRec * TModuleUnloadRec 指针
    PPackageTypeInfo TPackageTypeInfo * TPackageTypeInfo 指针
    PTypeTable TTypeTable * TTypeTable 指针
    PUnitEntryTable UnitEntryTable 指针,PackageUnitEntry 数组指针
    TChunkStatus 内存块的状态
    TEnumModuleFunc EnumModules 和 EnumResourceModules 的回调函数类型
    TEnumModuleFuncLW EnumModules 和 EnumResourceModules 的回调函数类型
    THeapStatus 全局堆状态
    TLibModule 模块链表节点
    TMemoryManager 内存管理 (过时的,需要用 TMemoryManagerEx 代替)
    TMemoryManagerEx 内存管理
    TMemoryManagerState 内存分配状态信息
    TMemoryMap TChunkStatus 数组,内存块状态数组
    TMinimumBlockAlignment 内存块对其方式 (8字节/16字节)
    TModuleUnloadProc AddModuleUnloadProc 和 RemoveModuleUnloadProc 的回调函数类型
    TModuleUnloadProcLW AddModuleUnloadProc 和 RemoveModuleUnloadProc 的回调函数类型
    TModuleUnloadRec 模块卸载时执行的函数链表节点
    TPackageTypeInfo 用于 PackageInfoTable 使用的类型
    TSmallBlockTypeState 小块内存分配状态信息
    TSmallBlockTypeStates TSmallBlockTypeState 数组
    TTypeTable TPackageTypeInfo 内部使用的类型
    UnitEntryTable PackageUnitEntry 数组

    1.8 其他数据类型

    类型 对应的 C++ 类型 说明
    AliasT 用于强类型的定义,不允许默认的类型转换
    Comp 用于按字节解析 double 类型浮点数
    CompBase Comp 类型的父类,只有一个 char[8] 数组数据成员
    Currency 货币型变量,用64位整数精确的保存有4位小数的数值
    -922337203685477.5808 ~ 922337203685477.5807
    CurrencyBase Currency 类型的父类,只有一个 __int64 类型整数成员
    DynamicArray 可变元素个数的数组
    file C++ 兼容 delphi 内置的 file 类型
    HResult HRESULT 调用接口的返回值,32位整数,相当于 long,
    0表示成功,不等于0表示错误编码
    OleVariant OLE 兼容的 Variant 类型
    PComp Comp * Comp 指针
    PCallDesc TCallDesc * TCallDesc 指针,Variant 类型的成员函数调用的类型和参数
    PCurrency Currency * 货币型指针
    PCVModInfo TCVModInfo * Windows 版本编译器内部使用的类型
    PDispDesc TDispDesc * TDispDesc 指针,IDispatch 函数调用的类型和参数
    PDoubleRec TDoubleRec * TDoubleRec 指针
    PExceptionRecord TExceptionRecord * TExceptionRecord 指针,结构化异常处理 (SEH) 保存的异常信息
    PExtended80Rec TExtended80Rec * TExtended80Rec 指针
    PExtendedRec PExtended80Rec 指针 或 PDoubleRec 指针
    PGUID TGUID * 全局唯一标识符 (globally unique identifier) 指针
    PInitContext TInitContext * TInitContext 指针
    PMethod TMethod * TMethod 指针
    PMonitor TMonitor * TMonitor 指针
    PMonitorSupport TMonitorSupport * TMonitor 内部使用的结构指针
    POleVariant OleVariant * OleVariant 指针
    PPMonitor PMonitor * TMonitor 指针的指针
    PResStringRec TResStringRec 指针
    PSingleRec TSingleRec * TSingleRec 指针
    PTextBuf TTextBuf * TTextBuf 指针
    PVarArray TVarArray * TVarArray 指针,用于 TVarData 内部处理数组
    PVarArrayBound TVarArrayBound * TVarArrayBound 指针
    PVarArrayBoundArray TVarArrayBoundArray * TVarArrayBoundArray 指针
    PVarArrayCoorArray TVarArrayCoorArray * TVarArrayCoorArray 指针
    PVarData TVarData * TVarData 指针
    PVariant Variant * Variant 指针
    PVariantManager TVariantManager * TVariantManager 指针
    PVarRec TVarRec * TVarRec 指针
    PVarRecord TVarRecord * TVarRecord 指针,用于处理 VT_RECORD 类型的 Variant 数据
    Set 集合类型
    SetBase 集合类型的父类
    StaticArray 固定元素个数的数组
    TArray__1 DynamicArray
    <T>
    动态数组模板类型
    TAssertErrorProc Delphi 的 Assert 回调函数类型
    TBoundArray DynamicArray
    <NativeInt>
    NativeInt 动态数组
    TCallDesc Variant 类型的成员函数调用的类型和参数
    TCPUIDRec 用于保存 CPUID 指令的返回值
    TCVModInfo Windows 版本的编译器内部使用的结构
    TDispDesc IDispatch 函数调用的类型和参数
    TDispatchMessage 消息处理用于获取消息ID
    TDLLProc 编译器内部使用的函数指针类型,dll 入口函数的回调函数
    TDLLProcEx 编译器内部使用的函数指针类型,dll 入口函数的回调函数
    TDoubleRec 用于解析 64 位 IEEE 浮点数
    TExceptClsProc 处理异常的类名时使用的回调函数指针类型
    TExceptionRecord 结构化异常处理 (SEH) 保存的异常信息
    TExceptObjProc 处理异常的对象时使用的回调函数指针类型
    TExtended80Rec 用于解析 80 位 IEEE 浮点数
    TExtendedRec TExtended80Rec 或 TDoubleRec
    TextFile C++ 兼容 delphi 内置的 text 类型
    TFileIOFunc 文件处理内部使用的函数指针类型
    TFileRec 用于文件处理内部保存文件数据信息
    TFloatSpecial TSingleRec 和 TDoubleRec 等解析出来的浮点数特殊值或状态
    TGUID GUID 全局唯一标识符 (globally unique identifier)
    TInitContext 调用组件包和异常处理等内部使用的结构
    TLargestVarData 内部使用的结构体 (在 struct/union 里面占位置)
    TMethod 用于解析 __closure 指针
    TMonitor 多个线程访问同一个资源的锁
    TMonitorSupport TMonitor 内部使用的结构
    TPtrWrapper 用于内存管理的指针类型
    TRaiseExceptionProc VCL/FMX 抛出异常的回调函数类型
    TRaiseExceptObjProc 处理异常的对象时使用的回调函数指针类型
    TResourceHandle NativeUInt 资源句柄 HRSRC
    TResStringRec 字符串资源
    TSafeCallErrorProc SafeCallException 的回调函数类型
    TSingleRec 用于解析 32 位 IEEE 浮点数
    TSystemThreadFuncProc 系统线程启动时的回调函数类型
    TSystemThreadEndProc 系统线程结束时的回调函数类型
    TTextBuf StaticArray<char, 128> TTextRec 内部使用的类型
    TTextIOFunc 文本处理内部使用的函数指针类型
    TTextLineBreakStyle 文本换行的类型 (\n 或 \r\n)
    TTextRec 用于库函数内部处理文本文件
    TThreadFunc BeginThread 启动的线程函数指针类型
    TThreadID unsigned 线程的标识
    TTypeKind 用于表示 Delphi 支持的类型
    TVarArray 用于 TVarData 内部处理数组
    TVarArrayBound 用户 TVarArray 内部储存数组元素起始下标和个数
    TVarArrayBoundArray StaticArray
    <TVarArrayBound, 1>
    TVarArrayBound 数组
    TVarArrayCoorArray StaticArray<int, 1> 存储元素位置的数组
    TVarData Variant 类型的父类,用于储存 Variant 类型的数据结构
    TVariantManager 包含一些 Variant 类型变量处理的函数
    TVarOp int Variant 类型的操作符类型
    TVarRec 用于函数的参数,不同类型的数据组成的数组
    TVarRecord 用于处理 VT_RECORD 类型的 Variant 数据
    TVarType unsigned short 可变类型 Variant 的类型
    Variant 用于 COM (Component Object Model 组件对象模型) 的可变类型

    二. System 常数

    2.1. Variant 的类型 (TVarType TVarData::VType)

    常数 类型 数值 OLE 对应类型
    varEmpty System::Int8 0x0 VT_EMPTY
    varNull System::Int8 0x1 VT_NULL
    varSmallint System::Int8 0x2 VT_I2
    varInteger System::Int8 0x3 VT_I4
    varSingle System::Int8 0x4 VT_R4
    varDouble System::Int8 0x5 VT_R8
    varCurrency System::Int8 0x6 VT_CY
    varDate System::Int8 0x7 VT_DATE
    varOleStr System::Int8 0x8 VT_BSTR
    varDispatch System::Int8 0x9 VT_DISPATCH
    varError System::Int8 0xa VT_ERROR
    varBoolean System::Int8 0xb VT_BOOL
    varVariant System::Int8 0xc VT_VARIANT
    varUnknown System::Int8 0xd VT_UNKNOWN
    varShortInt System::Int8 0x10 VT_I1
    varByte System::Int8 0x11 VT_UI1
    varWord System::Int8 0x12 VT_UI2
    varLongWord System::Int8 0x13 过时,请用 varUInt32
    varUInt32 System::Int8 0x13 VT_UI4
    varInt64 System::Int8 0x14 VT_I8
    varUInt64 System::Int8 0x15 VT_UI8
    varRecord System::Int8 0x24 VT_RECORD
    varStrArg System::Int8 0x48 VT_CLSID
    varObject System::Int8 0x49 VT_VERSIONED_STREAM
    varUStrArg System::Int8 0x4a 没找到 OLE 对应类型
    varString System::Word 0x100 Delphi 字符串,不是 OLE 兼容类型
    varAny System::Word 0x101 CORBA any 类型,不是 OLE 兼容类型
    varUString System::Word 0x102 UNICODE 字符串,不是 OLE 兼容类型
    varTypeMask System::Word 0xfff VT_TYPEMASK
    varArray System::Word 0x2000 VT_ARRAY
    varByRef System::Word 0x4000 VT_BYREF

    2.2. Variant 类型的操作符类型 (TVarOp)

    常数 类型 数值 说明
    System::Int8 opAdd 0x0
    System::Int8 opSubtract 0x1
    System::Int8 opMultiply 0x2
    System::Int8 opDivide 0x3
    System::Int8 opIntDivide 0x4 整除
    System::Int8 opModulus 0x5 余数
    System::Int8 opShiftLeft 0x6 左移
    System::Int8 opShiftRight 0x7 右移
    System::Int8 opAnd 0x8
    System::Int8 opOr 0x9
    System::Int8 opXor 0xa 异或
    System::Int8 opCompare 0xb 比较大小 System::Variants::TVarCompareResult
    System::Int8 opNegate 0xc 符号取反
    System::Int8 opNot 0xd 逻辑取反
    System::Int8 opCmpEQ 0xe 相等
    System::Int8 opCmpNE 0xf 不等
    System::Int8 opCmpLT 0x10 小于
    System::Int8 opCmpLE 0x11 小于等于
    System::Int8 opCmpGT 0x12 大于
    System::Int8 opCmpGE 0x13 大于等于

    2.3. TVarRec 的类型 (TVarRec::VType)

    常数 类型 数值 说明
    vtInteger System::Int8 0x0
    vtBoolean System::Int8 0x1
    vtChar System::Int8 0x2
    vtExtended System::Int8 0x3
    vtString System::Int8 0x4 过时的类型
    vtPointer System::Int8 0x5
    vtPChar System::Int8 0x6
    vtObject System::Int8 0x7
    vtClass System::Int8 0x8
    vtWideChar System::Int8 0x9
    vtPWideChar System::Int8 0xa
    vtAnsiString System::Int8 0xb
    vtCurrency System::Int8 0xc
    vtVariant System::Int8 0xd
    vtInterface System::Int8 0xe
    vtWideString System::Int8 0xf
    vtInt64 System::Int8 0x10
    vtUnicodeString System::Int8 0x11

    2.4. TTypeKind 的某些枚举值的别名

    常数 类型 数值 说明
    tkAnsiChar TTypeKind tkChar  
    tkWideChar TTypeKind tkWChar  
    tkUnicodeString TTypeKind tkUString  
    tkAnsiString TTypeKind tkLString  
    tkWideString TTypeKind tkWString  
    tkShortString TTypeKind tkString  

    2.5. TTextRec::Mode 的值

    常数 类型 数值 说明
    fmClosed Word 0xd7b0  
    fmInput Word 0xd7b1  
    fmOutput Word 0xd7b2  
    fmInOut Word 0xd7b3  

    2.6. 虚函数表 (Virtual Method Table)

    常数 类型 数值 说明
    CPP_ABI_ADJUST System::Int8 0x0/0x18 用于在不同编译环境使用不同的偏移量值
    vmtArcOffset System::Int8 0x0 用于在不同编译环境使用不同的偏移量值
    vmtSelfPtr Int8/short -88/-200
    vmtIntfTable Int8/short -84/-192
    vmtAutoTable Int8/short -80/-184
    vmtInitTable Int8/short -76/-176
    vmtTypeInfo Int8/short -72/-168
    vmtFieldTable Int8/short -68/-160
    vmtMethodTable Int8/short -64/-152
    vmtDynamicTable Int8/short -60/-144
    vmtClassName Int8/short -56/-136
    vmtInstanceSize System::Int8 -52/-128
    vmtParent System::Int8 -48/-120
    vmtEquals System::Int8 -44/-112 过时,在汇编代码里面需要使用 VMTOFFSET
    vmtGetHashCode System::Int8 -40/-104 过时,在汇编代码里面需要使用 VMTOFFSET
    vmtToString System::Int8 -36/-96 过时,在汇编代码里面需要使用 VMTOFFSET
    vmtSafeCallException System::Int8 -32/-88 过时,在汇编代码里面需要使用 VMTOFFSET
    vmtAfterConstruction System::Int8 -28/-80 过时,在汇编代码里面需要使用 VMTOFFSET
    vmtBeforeDestruction System::Int8 -24/-72 过时,在汇编代码里面需要使用 VMTOFFSET
    vmtDispatch System::Int8 -20/-64 过时,在汇编代码里面需要使用 VMTOFFSET
    vmtDefaultHandler System::Int8 -16/-56 过时,在汇编代码里面需要使用 VMTOFFSET
    vmtNewInstance System::Int8 -12/-48 过时,在汇编代码里面需要使用 VMTOFFSET
    vmtFreeInstance System::Int8 -8 /-40 过时,在汇编代码里面需要使用 VMTOFFSET
    vmtDestroy System::Int8 -4 /-32 过时,在汇编代码里面需要使用 VMTOFFSET
    vmtQueryInterface System::Int8 0x0 过时,在汇编代码里面需要使用 VMTOFFSET
    vmtAddRef System::Int8 0x4/0x8 过时,在汇编代码里面需要使用 VMTOFFSET
    vmtRelease System::Int8 0x8/0x10 过时,在汇编代码里面需要使用 VMTOFFSET
    vmtCreateObject System::Int8 0xc/0x18 过时,在汇编代码里面需要使用 VMTOFFSET

    2.7. Test8086 的值

    常数 类型 数值 说明
    CPUi386 System::Int8 0x2 测试发现 Windows 系统里面 Test8086 始终等于 2
    CPUi486 System::Int8 0x3 Windows 之外其他操作系统可能的值
    CPUPentium System::Int8 0x4 Windows 之外其他操作系统可能的值

    2.8. 浮点数异常处理

    常数 类型 数值 说明
    feeINVALID System::Int8 0x1 不合理的运算 (例如 0.0/0.0)
    feeDENORMALOPERAND System::Int8 0x2 次正常,接近向下溢出时丢失精度
    feeDIVBYZERO System::Int8 0x4 被零除 (例如 1.0/0.0)
    feeOVERFLOW System::Int8 0x8 向上溢出
    feeUNDERFLOW System::Int8 0x10 向下溢出
    feeINEXACT System::Int8 0x20 降低了精度
    feeALLEXCEPT System::Int8 0x3f 所有浮点数异常
    femINVALID System::Int8/
    Byte
    0x1/
    0x80
    不合理的运算 (例如 0.0/0.0)
    femDENORMALOPERAND System::Int8/
    System::Word
    0x2/
    0x100
    次正常,接近向下溢出时丢失精度
    femDIVBYZERO System::Int8/
    System::Word
    0x4/
    0x200
    被零除 (例如 1.0/0.0)
    femOVERFLOW System::Int8/
    System::Word
    0x8/
    0x400
    向上溢出
    femUNDERFLOW System::Int8/
    System::Word
    0x10/
    0x800
    向下溢出
    femINEXACT System::Int8/
    System::Word
    0x20/
    0x1000
    降低了精度
    femALLEXCEPT System::Int8/
    System::Word
    0x3f/
    0x1f80
    所有浮点异常
    ferTONEAREST System::Int8 0x0 减少精度位数:最接近的值
    ferUPWARD System::Word 0x800/0x4000 减少精度位数:向上取值
    ferDOWNWARD System::Word 0x400/0x2000 减少精度位数:向下取值
    ferTOWARDZERO System::Word 0xc00/0x6000 减少精度位数:向零的方向取值
    ferALLROUND System::Word 0xc00/0x6000 减少精度位数掩码

    2.9. 未分类常数

    常数 类型 数值 说明
    RTLVersion double 运行库版本,例如 35.00 (C++ Builder 11.1), 30.00 (C++ Builder 10.0)
    RTLVersionC int 运行库版本,例如 3500 (C++ Builder 11.1), 3000 (C++ Builder 10.0)
    False bool false 布尔型常数 false
    True bool true 布尔型常数 true
    MaxInt int 2147483647 int 类型的最大值
    MaxLongInt int 2147483647 long 类型的最大值
    hfFieldSize int 0x4/0x8 TMonitor 获取成员地址用的成员大小
    hfMonitorOffset System::Int8 0x0 TMonitor 获取成员地址用的成员偏移
    NumSmallBlockTypes System::Int8 55/46 TSmallBlockTypeStates 的元素个数
    sLineBreak const char * "\r\n" / "\n" 换行符,Windows "\r\n" 其他 "\n"
    tfCRLF System::Int8 0x1 TTextRec::Flags 如果包含这个位就是 \r\n 换行,否则是 \n 换行
    DefaultMethodRttiVisibility Set {vcPublic, vcPublished} RTTI 默认的可以访问的成员函数权限类型
    DefaultFieldRttiVisibility Set {vcPrivate, vcProtected, vcPublic, vcPublished} RTTI 默认的可以访问的数据成员权限类型
    DefaultPropertyRttiVisibility Set {vcPublic, vcPublished} RTTI 默认的可以访问的属性成员权限类型

    三. System 变量

    3.1. 处理器相关的全局变量

    变量 类型 说明
    CPUCount int CPU 数量 (CPU 核心的线程数)
    CPUIDTable System::StaticArray
    <TCPUIDRec, 8>
    保存 CPU 识别信息,系统内部代码优化使用
    Default8087CW Word FPU 默认控制字的值
    DefaultMXCSR unsigned MXCSR 寄存器默认值
    Test8086 Byte CPU 类型
    Test8087 Byte FPU 类型
    TestFDIV Int8 FPU 除法运算是否有缺陷
    TestSSE unsigned CPU 是否支持 SSE (Streaming SIMD Extensions)

    3.2. 异常处理相关的全局变量

    变量 类型 说明
    AbstractErrorProc void __fastcall (*)(void) 调用了抽象方法 (纯虚函数) 产生异常的回调函数
    AssertErrorProc TAssertErrorProc Delphi 的 Assert 内部调用的回调函数
    DispCallByIDProc 接口调用产生异常时调用的回调函数指针
    ErrorProc 运行时错误调用的回调函数指针,默认指向一个把报错转成抛异常的函数
    ExceptClsProc void * 指向一个处理异常的回调函数,返回异常类
    ExceptionAcquired void * AcquireExceptionObject 内部调用的回调函数
    ExceptionClass TClass 正在处理的异常类
    ExceptObjProc void * 指向一个处理异常的回调函数,返回异常对象
    ExceptProc 未处理的异常调用的回调函数指针
    RaiseExceptionProc TRaiseExceptionProc 指向一个产生异常的 API 函数,可以从汇编语言里面调用
    RaiseExceptObjProc void * 在产生异常时调用的回调函数 TRaiseExceptObjProc
    RTLUnwindProc void * 指向 API 函数 RTLUnwind,可以从汇编语言里面调用
    SafeCallErrorProc TSafeCallErrorProc SafeCallException 内部调用的回调函数

    3.3. 处理 Variant 内部使用的函数指针

    变量 类型 说明
    VarClearProc 处理 Variant 内部使用的函数指针
    VarAddRefProc 处理 Variant 内部使用的函数指针
    VarCopyProc 处理 Variant 内部使用的函数指针
    VarToLStrProc 处理 Variant 内部使用的函数指针
    VarToWStrProc 处理 Variant 内部使用的函数指针
    VarToUStrProc 处理 Variant 内部使用的函数指针

    3.4. 未分类的全局变量

    变量 类型 说明
    AllocMemCount int 内存块分配总数 (过时的变量)
    AllocMemSize int 内存块分配总字节数 (过时的变量)
    AlternateWriteUnicodeStringProc 写入文本文件时调用的回调函数
    CmdLine WideChar * 命令行字符串
    CmdShow int 主窗口创建时的状态
    DebugHook Byte 在 IDE 环境调试程序时如何处理异常
    DefaultSystemCodePage int 默认的 ANSI 代码页
    DefaultTextLineBreakStyle TTextLineBreakStyle 默认的换行符
    DefaultUnicodeCodePage int UnicodeString 的默认代码页
    DLLShutdownProc DLLShutdown 内部调用的函数指针
    ErrorAddr void * 导致运行时错误的地址
    ErrOutput TextFile 错误输出设备 (控制台程序),只写文本文件
    ExitCode int 告诉父进程或操作系统程序结束时的状态
    ExitProc void * 程序退出时调用的回调函数
    ExitProcessProc void __fastcall (*)(void) 程序结束之前最后一个调用的回调函数
    FileMode Byte Delphi 的 Reset 和 Rewrite 使用的打开文件方式
    HeapAllocFlags Word 内存管理如何从操作系统获取内存
    HPrevInst unsigned 应用程序的上一个实例,过时的变量
    InitProc void * 应用程序初始化时,即 TApplication::Initialize 调用的回调函数
    Input TextFile 标准输入设备 (控制台程序),只读文本文件
    IsConsole bool 当前模块是否控制台程序
    IsLibrary bool 当前模块是否 dll
    IsMultiThread bool 是否多线程程序
    JITEnable Byte 在什么情况下调用 JIT 调试 (just-in-time debugger)
    LibModuleList TLibModule * 记录模块和组件包的链表
    MainInstance HINSTANCE exe 文件的实例句柄
    MainThreadID unsigned 当前模块的主线程的 ID
    ModuleUnloadList TModuleUnloadRec * 模块卸载时调用的回调函数的链表
    NeverSleepOnMMThreadContention bool 多个线程同时访问内存管理在切换线程时是否不使用 Sleep
    NoErrMsg bool 是否不显示运行时错误提示信息
    Output TextFile 标准输出设备 (控制台程序),只写文本文件
    RandSeed int 产生随机数用的初始化值
    ReportMemoryLeaksOnShutdown bool Delphi 程序在退出时是否显示内存泄漏
    SystemThreadEndProc TSystemThreadEndProc EndThread 在结束线程之前调用这个指针指向的函数
    SystemThreadFuncProc TSystemThreadFuncProc BeginThread 在创建线程之前调用这个指针指向的函数
    UTF8CompareLocale unsigned UTF-8 字符串按照哪个地区的语言比较大小

    四. System 宏

    说明
    _D 适配 UNICODE/ANSI 的字符串常数,相当于 C 语言的 _T 或 _TEXT
    BEGIN_MESSAGE_MAP 开始处理 Windows 消息,相当于重写 Dispatch 函数
    END_MESSAGE_MAP 结束处理 Windows 消息,相当于结束 Dispatch 函数
    MESSAGE_HANDLER 处理 Windows 消息,由于与 ATL 冲突,需要用 VCL_MESSAGE_HANDLER 代替
    VCL_MESSAGE_HANDLER 处理 Windows 消息

    五. System 函数

    5.1. 资源相关的函数

    函数 说明
    FindResource 根据类型和名称在指定模块里面查找资源
    LoadResource 加载一个资源
    LockResource 获取资源的指针,并没有锁定资源
    UnlockResource 已经弃用的函数,没有 (不需要) 解锁资源
    SizeofResource 获取资源的字节数
    FreeResource 已经弃用的函数,没有 (不需要) 释放资源

    5.2. 内存管理相关的函数

    函数 说明
    AllocMem 分配内存并且内存每个字节都初始化为零
    AttemptToUseSharedMemoryManager 尝试使用共享内存管理
    FreeMemory 与 Delphi 的 FreeMem 兼容,释放 GetMemory 或 AllocMem 分配的内存
    GetHeapStatus 获取堆状态
    GetMemory 与 Delphi 的 GetMem 兼容的分配内存函数
    GetMemoryManager 获取当前的内存管理
    GetMemoryManagerState 获取内存管理状态
    GetMemoryMap 获取内存映射表
    GetMinimumBlockAlignment 获取最小的内存块对齐方式
    IsMemoryManagerSet 是否设置了内存管理
    ReallocMemory 与 Delphi 的 ReallocMem 兼容,改变内存分配大小
    RegisterExpectedMemoryLeak 注册只分配不需要释放的内存
    SetMemoryManager 设置内存管理
    SetMinimumBlockAlignment 设置最小的内存块对齐方式
    ShareMemoryManager 共享这个模块的内存管理
    SysAllocMem 系统内部使用的分配内存并清零函数
    SysFreeMem 系统内部使用的释放内存函数
    SysGetMem 系统内部使用的分配内存函数
    SysReallocMem 系统内部使用的改变内存分配大小
    SysRegisterExpectedMemoryLeak 系统内部使用的注册只分配不需要释放的内存
    SysUnregisterExpectedMemoryLeak 系统内部使用的注销只分配不需要释放的内存
    UnregisterExpectedMemoryLeak 注销只分配不需要释放的内存

    5.3. 错误及异常处理相关的函数

    函数 说明
    AcquireExceptionObject 请求使用异常对象,引用计数 +1,不被自动销毁
    ExceptAddr 获取产生异常的地址
    ExceptObject 获取产生异常的对象
    FCheckExcept 系统内部浮点数异常处理:检测异常
    FClearExcept 系统内部浮点数异常处理:清除异常
    FGetExceptFlag 系统内部浮点数异常处理:获取异常
    FGetExceptMask 系统内部浮点数异常处理:获取浮点数异常掩码
    FGetRound 系统内部浮点数异常处理:获取浮点数减少精度的处理方式
    FRaiseExcept 系统内部浮点数异常处理:抛出异常
    FSetExceptFlag 系统内部浮点数异常处理:设置异常
    FSetExceptMask 系统内部浮点数异常处理:设置浮点数异常掩码
    FSetRound 系统内部浮点数异常处理:设置浮点数减少精度的处理方式
    Get8087CW 获取 FPU 控制字
    GetMXCSR 获取 MXCSR 寄存器
    RaiseList 系统内部使用的函数,如果要使用异常对象可以使用 AcquireExceptionObject
    ReleaseExceptionObject 请求释放异常对象,引用计数 -1,当引用计数等于 0 时异常对象将自动销毁
    Reset8087CW 复位 FPU 控制字
    ResetMXCSR 复位 MXCSR 寄存器
    Set8087CW 设置 FPU 控制字
    SetLastError 修改由 GetLastError 获取的错误编码
    SetMXCSR 设置 MXCSR 寄存器
    SetMXCSRExceptionFlag 设置 MXCSR 寄存器的异常标志
    SetRaiseList 系统内部使用的函数,如果要使用异常对象可以使用 AcquireExceptionObject

    5.4. 字符串处理函数

    函数 说明
    AnsiToUtf8 字符串 (UnicodeString) 转 UTF-8
    IsICUAvailable 获取是否使用了 ICU (international components for unicode)
    LoadResString 从资源里面加载字符串
    LocaleCharsFromUnicode UTF-16 字符串转为指定代码页的 ANSI 编码字符串
    Move 复制内存里面的数据
    MoveChars 复制 UTF-16 字符数据
    OleStrToString COM (Component Object Model) 字符串转字符串
    OleStrToStrVar COM (Component Object Model) 字符串转字符串
    Pos 在一个字符串里面寻找另一个字符串出现的位置
    PUCS4Chars UCS4String 转 UCS4Char 字符指针
    SetAnsiString 字符指针按照指定的代码页转 ANSI 字符串
    SetCodePage 给 RawByteString 指定代码页
    SetMultiByteConversionCodePage 指定默认转为 UNICODE 的 ANSI 编码的代码页
    SetUTF8CompareLocale 设置 UTF-8 字符串比较使用的地区和语言
    StringCodePage 获取字符串的代码页
    StringElementSize 获取字符串编码单元的字节数
    StringOfChar 生成指定个数的某个字符的字符串,例如 "AAAAAAAAAA"
    StringRefCount 获取字符串的引用计数
    StringToOleStr 字符串转 COM (Component Object Model) 字符串
    StringToWideChar 字符串转字符指针
    UCS4StringToUnicodeString UTF-32 转 UTF-16
    UCS4StringToWideString UTF-32 字符串转 WideString (UTF-16)
    UnicodeFromLocaleChars 指定代码页的 ANSI 编码字符串转为 UTF-16 字符串
    UnicodeStringToUCS4String UTF-16 转 UTF-32
    UnicodeToUtf8 UTF-16 转 UTF-8
    UniqueString 如果字符串与其他字符串共用内存,分配内存并复制内容,引用计数置为1,与其他字符串脱离引用关系
    UpCase 字符转大写 (只处理英文字母)
    UTF8Decode 过时 (UTF-8 转 UTF-16 编码的 WideString),请使用 UTF8String
    UTF8Encode UTF-16 转 UTF-8 编码的 RawByteString
    UTF8EncodeToShortString UTF-16 转 UTF-8 编码的 ShortString
    Utf8ToAnsi UTF-8 转字符串 (UnicodeString)
    UTF8ToString UTF-8 转 UnicodeString (UTF-16)
    Utf8ToUnicode UTF-8 转 UTF-16
    UTF8ToUnicodeString UTF-8 转 UnicodeString (UTF-16)
    UTF8ToWideString 过时 (UTF-8 转 UTF-16 编码的 WideString),请使用 UTF8String
    WideCharLenToString WideChar 指针转字符串,指定最大长度
    WideCharLenToStrVar WideChar 指针转字符串,指定最大长度
    WideCharToString WideChar 指针转字符串
    WideCharToStrVar WideChar 指针转字符串
    WideCharToUCS4String UTF-16 转 UTF-32
    WideStringToUCS4String WideString (UTF-16) 转 UTF-32 字符串

    5.5. 文件处理函数

    函数 说明
    ChDir 设置当前路径
    Flush 清除文本文件的缓存,修改内容写入磁盘
    GetTextCodePage 获取文本文件的代码页
    IOResult 获取 I/O 错误编码
    MkDir 创建文件夹
    RmDir 删除空文件夹
    SetInOutRes 设置 I/O 错误编码
    SetLineBreakStyle 设置换行符
    SetTextCodePage 设置文本文件的代码页
    TextStart 已经弃用的函数

    5.6. 动态数组相关的函数

    函数 说明
    CopyArray 复制动态数组,按照给定的元素类型
    DynArrayAssign 复制动态数组
    DynArrayBounds 获取动态数组下标范围
    DynArrayClear 清除动态数组
    DynArrayCopy 复制动态数组里面的数据
    DynArrayCopyRange 复制动态数组里面的一部分数据
    DynArrayDim 获取动态数组的维度
    DynArrayIndex 获取动态数组里面指定下标的数据
    DynArraySetLength 改变动态数组每个维度的数据个数
    DynArraySize 获取动态数组大小
    DynArrayUnique 如果动态数组与其他动态数组共用内存,分配内存并复制内容,引用计数置为1,与其他动态数组脱离引用关系
    FinalizeArray 结束动态数组操作
    InitializeArray 初始化动态数组
    IsDynArrayRectangular 动态数组每个维度的元素个数是否相同
    MoveArray 复制动态数组,按照给定的元素类型

    5.7. 浮点数处理及数学运算函数

    函数 说明
    ArcTan 反正切
    CompToCurrency Comp 类型数值转货币类型数值
    CompToDouble Comp 类型数值转 double 类型数值
    Cos 余弦
    CurrencyToComp 货币类型数值转 Comp 类型数值
    DoubleToComp double 类型数值转 Comp 类型数值
    Exp ex
    ExpMinus1 ex-1
    FPower10 过时的函数,可以用 Power10 代替
    Frac 浮点数的小数部分
    Int 浮点数的整数部分
    Ln 自然对数
    LnXPlus1 x+1 的自然对数 ln(x+1)
    Power10 x*10p
    Sin 正弦
    SineCosine 正弦和余弦
    Sqrt 开平方
    Tangent 正切

    5.8. 未分类的函数

    函数 说明
    AddModuleUnloadProc 添加当组件包卸载的时候执行的回调函数
    BeginThread 创建一个线程
    CopyRecord 复制记录,按照指定的字段结构类型
    DLLShutdown DLL 退出时执行,这个函数会调用 DLLShutdownProc 回调函数
    EndThread 结束一个线程
    EnumModules 枚举 exe 文件加载的模块 (组件包)
    EnumResourceModules 枚举 exe 文件加载的资源模块
    FinalizeRecord 结束记录操作
    FindClassHInstance 寻找某个类是在哪个模块里面定义的
    FindHInstance 寻找某个内存地址属于哪个模块
    FindResourceHInstance 寻找某个资源在哪个模块里面
    GetCPUID 获取 CPUID 的值
    GetDynaMethod 用于动态方法调度
    GetLocaleOverride 通过应用程序的名字获取这个应用程序的语言
    GetResourceModuleName 根据模块名称获取模块的语言
    GetUILanguages 根于语言 ID 返回显示适合使用的语言列表
    GetVariantManager 获取 Variant 类型数据管理器
    InterLockedExchg 源码里面没发现这个函数的使用 (使用 AtomicExchange 赋值并返回以前的值)
    interface_cast 接口类型转换,相当于 Delphi 的 as 操作符
    IsVariantManagerSet 获取是否设置了 Variant 类型数据管理器
    LoadResourceModule 加载资源模块
    Mark Turbo Pascal 遗留下来的函数,这个函数已经没有意义了
    MonitorEnter 锁定使用一个对象,如果被别的线程锁定了,这个线程就挂起等待
    MonitorExit 被锁定使用的对象解锁
    MonitorPulse 解锁对象之后,告诉下一个等待的线程可以立即锁定使用了
    MonitorPulseAll 解锁对象之后,告诉等待队列里面所有的线程可以立即锁定使用了
    MonitorTryEnter 锁定使用一个对象,如果被别的线程锁定了,这个函数就失败返回
    MonitorWait 等待被锁定对象解锁
    MoveRecord 复制记录,按照指定的字段结构类型
    ParamCount 命令行参数个数
    ParamStr 命令行参数
    Random 生成随机数
    Randomize 初始化随机数
    RegisterModule 注册模块,系统内部使用的函数
    RegisterWeakRefTypeInfo 系统内部用于 RTTI 的函数
    Release Turbo Pascal 遗留下来的函数,这个函数已经没有意义了
    RemoveModuleUnloadProc 移除当组件包卸载的时候执行的回调函数
    SetLocaleOverride 设置应用程序的语言
    SetVariantManager 设置 Variant 类型数据管理器
    SysHasWeakRef 系统内部用于 RTTI 的函数
    UnregisterModule 注销模块,系统内部使用的函数

    相关:


    C++ Builder 参考手册System

    相关文章

      网友评论

          本文标题:System - C++ Builder

          本文链接:https://www.haomeiwen.com/subject/vgfrwltx.html