System - C++ Builder

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容