delphi中 基础包 SysUtils单元中文注释.docx
- 文档编号:9728873
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:74
- 大小:55.82KB
delphi中 基础包 SysUtils单元中文注释.docx
《delphi中 基础包 SysUtils单元中文注释.docx》由会员分享,可在线阅读,更多相关《delphi中 基础包 SysUtils单元中文注释.docx(74页珍藏版)》请在冰豆网上搜索。
delphi中基础包SysUtils单元中文注释
SysUtils单元;
目录
1.常量(Const)2
1)文件打开方式2
2)文件属性3
3)时间单位3
2.类型定义(type)4
3.符号(Signals)8
4.实用函数过程10
1)Win32OS版本测试函数10
2)货币和日期/时间格式化选项10
3)线程安全流通和日期/时间格式化13
4)内存管理例程。
14
5)退出过程处理14
6)字符串处理例程14
7){文件管理例程}17
8)PChar例程21
9)字符串格式化程序23
10)浮点转换程序25
11)日期/时间支持程序30
12)系统错误信息36
13)初始化文件支持36
14)异常处理程序37
15)MBCS函数40
16)接口支持程序43
17)包支持程序44
18)终止过程支持46
19)线程同步47
************************系统实用例程********************************
Delphi/Kylix跨平台运行时库(SystemUtilities)
Copyright(c)1995-2002BorlandSoftwrareCorporation
*******************************************************************
SysUtils单元;
1.常量(Const)
1)文件打开方式
{$以下用于Linux环境}
fmOpenRead=O_RDONLY;
fmOpenWrite=O_WRONLY;
fmOpenReadWrite=O_RDWR;
//fmShareCompat不被支持
fmShareExclusive=$0010;
fmShareDenyWrite=$0020;
//fmShareDenyRead不被支持
fmShareDenyNone=$0030;
{$ENDIF}
{$以下用于MsWindows}
fmOpenRead=$0000;
fmOpenWrite=$0001;
fmOpenReadWrite=$0002;
fmShareCompat=$0000platform;//DOS兼容模式不portable
fmShareExclusive=$0010;
fmShareDenyWrite=$0020;
fmShareDenyRead=$0030platform;//只写在所有平台上都不被支持
fmShareDenyNone=$0040;
{$ENDIF}
2)文件属性
faReadOnly=$00000001platform;
faHidden=$00000002platform;
faSysFile=$00000004platform;
faVolumeID=$00000008platform;
faDirectory=$00000010;
faArchive=$00000020platform;
faSymLink=$00000040platform;
faAnyFile=$0000003F;
3)时间单位
HoursPerDay=24;每天24小时
MinsPerHour=60;每小时60分
SecsPerMin=60;每分钟60秒
MSecsPerSec=1000;每秒1000毫秒
MinsPerDay=HoursPerDay*MinsPerHour;每天的分钟数
SecsPerDay=MinsPerDay*SecsPerMin;每天秒数
MSecsPerDay=SecsPerDay*MSecsPerSec;每天毫秒数
DateDelta=693594;每天介于1/1/0001和12/31/1899之间
UnixDateDelta=25569;{介于TDateTime基数(12/31/1899)和Unixtime_t基数(1/1/1970)之间的天数}
2.类型定义(type)
TSysCharSet=setofChar;//设置字符类型标准:
所有ANSI字符的集合
TIntegerSet=setof0..SizeOf(Integer)*8-1;{设定整数的访问类型:
0-31的整数集合}
//类型转换
//WordRec使访问一个Word类型变量或者其他16位变量(SmallInt)的高位和低位字节变得更容易
WordRec=packedrecord
caseIntegerof
0:
(Lo,Hi:
Byte);
1:
(Bytes:
array[0..1]ofByte);
end;
LongRec使访问一个LongWord类型变量或者其它32位变量(Single)高位和低位字变得更容易。
LongRec=packedrecord
caseIntegerof
0:
(Lo,Hi:
Word);
1:
(Words:
array[0..1]ofWord);
2:
(Bytes:
array[0..3]ofByte);
end;
Int64Rec使访问一个Int64类型变量或者其它64位变量(Double)高位和低位字变得更容易。
Int64Rec=packedrecord
caseIntegerof
0:
(Lo,Hi:
Cardinal);
1:
(Cardinals:
array[0..1]ofCardinal);
2:
(Words:
array[0..3]ofWord);
3:
(Bytes:
array[0..7]ofByte);
end;
//一般数组
PByteArray=^TByteArray;
TByteArray=array[0..32767]ofByte;
PWordArray=^TWordArray;
TWordArray=array[0..16383]ofWord;
TProcedure=procedure;//一般程序指针
TFileName=typestring;//一般文件类型
TSearchRec=record//用于搜索记录的结构(由函数FindFirst,FindNext,和FindClose使用)
Time:
Integer;
Size:
Integer;
Attr:
Integer;
Name:
TFileName;
ExcludeAttr:
Integer;
{$以下用于MsWindows平台}
FindHandle:
THandleplatform;
FindData:
TWin32FindDataplatform;
{$ENDIF}
{$以下用于Linux环境}
Mode:
mode_tplatform;
FindHandle:
Pointerplatform;
PathOnly:
Stringplatform;
Pattern:
Stringplatform;
{$ENDIF}
end;
TFloatValue=(fvExtended,fvCurrency);浮点类型格式化代码
TFloatFormat=(ffGeneral,ffExponent,ffFixed,ffNumber,ffCurrency);FloatToText格式化代码
TFloatRec=packedrecord//FloatToDecimal结果的记录型结构
Exponent:
Smallint;
Negative:
Boolean;
Digits:
array[0..20]ofChar;
end;
TTimeStamp=record//日期和时间的记录结构
Time:
Integer;从0:
00开始的的毫秒数
Date:
Integer;{从1/1/0001以后的天的加数}
end;
TMbcsByteType=(mbSingleByte,mbLeadByte,mbTrailByte);多字节字符集的字节类型
TSysLocale=packedrecord//本地系统信息记录类型
DefaultLCID:
Integer;
PriLangID:
Integer;
SubLangID:
Integer;
FarEast:
Boolean;
MiddleEast:
Boolean;
end;
{$以下用于MsWindows平台}
TLangRec=packedrecord//被使用的语言
FName:
string;
FLCID:
LCID;
FExt:
string;
end;
TLanguages=class//存储系统支持的语言
private
……..
Public
…….
endplatform;
{$ENDIF}
{以下用于Linux环境}
TEraRange=record
StartDate:
Integer;//从12/31/1899(TDateTime基数)的全部天数
EndDate:
Integer;//从12/31/1899(TDateTime基数)的全部天数
Direction:
Char;
end;
{$ENDIF}
Exception=class(TObject)//异常
private
……..
public
……….
end;
ExceptClass=classofException;
EAbort=class(Exception);
EHeapException=class(Exception)
private
AllowFree:
Boolean;
public
procedureFreeInstance;override;
end;
EOutOfMemory=class(EHeapException);
EInOutError=class(Exception)
public
ErrorCode:
Integer;
end;
{以下用于MsWindows平台}
PExceptionRecord=^TExceptionRecord;
TExceptionRecord=record
ExceptionCode:
Cardinal;
ExceptionFlags:
Cardinal;
ExceptionRecord:
PExceptionRecord;
ExceptionAddress:
Pointer;
NumberParameters:
Cardinal;
ExceptionInformation:
array[0..14]ofCardinal;
end;
{$ENDIF}
EExternal=class(Exception)
public
{$以下用于MsWindows平台}
ExceptionRecord:
PExceptionRecordplatform;
{$ENDIF}
{$以下用于Linux环境}
ExceptionAddress:
LongWordplatform;
AccessAddress:
LongWordplatform;
SignalNumber:
Integerplatform;
{$ENDIF}
end;
EExternalException=class(EExternal);
EIntError=class(EExternal);
EDivByZero=class(EIntError);
ERangeError=class(EIntError);
EIntOverflow=class(EIntError);
EMathError=class(EExternal);
EInvalidOp=class(EMathError);
EZeroDivide=class(EMathError);
EOverflow=class(EMathError);
EUnderflow=class(EMathError);
EInvalidPointer=class(EHeapException);
EInvalidCast=class(Exception);
EConvertError=class(Exception);
EAccessViolation=class(EExternal);
EPrivilege=class(EExternal);
EStackOverflow=class(EExternal)enddeprecated;
EControlC=class(EExternal);
{以下用于Linux环境}
EQuit=class(EExternal)endplatform;
{$ENDIF}
{以下用于Linux环境}
ECodesetConversion=class(Exception)endplatform;
{$ENDIF}
EVariantError=class(Exception);
EPropReadOnly=class(Exception);
EPropWriteOnly=class(Exception);
EAssertionFailed=class(Exception);
{$IFNDEFPC_MAPPED_EXCEPTIONS}
EAbstractError=class(Exception)endplatform;
{$ENDIF}
EIntfCastError=class(Exception);
EInvalidContainer=class(Exception);
EInvalidInsert=class(Exception);
EPackageError=class(Exception);
EOSError=class(Exception)
public
ErrorCode:
DWORD;
end;
{以下用于MsWindows平台}
EWin32Error=class(EOSError)
enddeprecated;
{$ENDIF}
ESafecallException=class(Exception);
{以下用于Linux环境}
3.符号(Signals)
外部异常或符号由DelphiRTL默认被转换到语言异常。
在Linux下,一个Delphi应用程序安装符号处理机来诱捕原始符号并转换他们。
Delphi库默认不安装处理机。
所以你要是执行一个标准库,类似ApacheDSO,你想要将符号转换到能够捕获的语言异常,就必须人工安装符号钩,用DelphiRTL提供的接口。
对于大多数的库,安装符号处理机是恰当简便的。
在初始时间调用HookSignal(RTL_SIGDEFAULT),在关闭时调用UnhookSignal(RTL_SIGNALDEFAULT),将会为一组符号安装处理机,Delphi应用程序被RTL正常钩住。
有时候会有一些使以上的初始化不能工作的事情。
适当的设置一个符号处理机的行为,然后当整理完后恢复到以前状态。
如果你有两个库lib1和lib2,lib1安装了符号处理机,然后lib2也安装了一个,如果要恢复符号处理机则那些库就必须以适当的次序卸载,或者符号处理机能够被留在矛盾而致命的地方。
为了防止这种可能,允许你无论在何种情况下在外部库中发现这种行为都能较好的管理符号处理机,我们提供了一组4个接口来容许你在紧急事件中剪裁Delphi符号处理机挂钩/脱钩,他们是:
InquireSignal
AbandonSignalHandler
HookSignal
UnhookSignal
InquireSignal允许你看符号处理机的状态,也就是你能发现在你之下抓取它的人。
AbandonSignalHandler告诉RTL从不脱钩一个特定的符号处理机。
如果你发现一个符号处理机将要不安全的返回到以前状态就需要使用它。
例如,如果前一个符号处理机被一个后来被卸载的库安装。
HookSignal/UnhookSignal设置符号处理机映射某个信号为语言异常。
其它的看下面的InquireSignal等注释。
const
RTL_SIGINT=0;//用户中断Userinterrupt(SIGINT)
RTL_SIGFPE=1;//浮点异常(SIGFPE)
RTL_SIGSEGV=2;//分割违背(SIGSEGV)
RTL_SIGILL=3;//非法指令(SIGILL)
RTL_SIGBUS=4;//总线Bus错误(SIGBUS)
RTL_SIGQUIT=5;//用户中断(SIGQUIT)
RTL_SIGLAST=RTL_SIGQUIT;//已用于内部,不能用
RTL_SIGDEFAULT=-1;//意味着我们捕获一组符号Meansallofasetofsignalsthatthewecapture
//normally.这是当前全部进程
//signals.你不能传递这个到InquireSignal.
type
//TSignalState给定的符号处理机的状态,由InquireSignal送回。
看以下InquireSignal。
TSignalState=(ssNotHooked,ssHooked,ssOverridden);
var
如果DeferUserInterrupts设置,我们不能引发SIGINT、SIGQUIT这样的异常,而是当信号到达时设置SIGINTIssued或SIGQUITIssued,并且要忍受OS发出的信号。
这个引起GUI应用程序偶然的延迟实际信号处理直到它是安全
DeferUserInterrupts:
Boolean;
SIGINTIssued:
Boolean;
SIGQUITIssued:
Boolean;
{$ENDIF}
{$以下用于Linux环境}
const
MAX_PATH=4095;//From/usr/include/linux/limits.hPATH_MAX
{$ENDIF}
var
{空字串和null字符指针.这些常量只为向后兼容而提供。
}
EmptyStr:
string='';
NullStr:
PString=@EmptyStr;
EmptyWideStr:
WideString='';
NullWideStr:
PWideString=@EmptyWideStr;
{$以下用于MsWindows平台}
Win32平台标识符,将会是下列数值之一:
VER_PLATFORM_WIN32s
VER_PLATFORM_WIN32_WINDOWS
VER_PLATFORM_WIN32_NT
Win32Platform:
Integer=0;//数值看WINDOWS.PAS
Win32OS版本信息见TOSVersionInfo.dwMajorVersion/dwMinorVersion/dwBuildNumber
Win32MajorVersion:
Integer=0;
Win32MinorVersion:
Integer=0;
Win32BuildNumber:
Integer=0;
Win32CSDVersion:
string='';//Win32OS以外版本信息字符串见TOSVersionInfo.szCSDVersion
4.实用函数过程
1)Win32OS版本测试函数
functionCheckWin32Version(AMajor:
Integer;AMinor:
Integer=0):
Boolean;
GetFileVersion返回一个32位的文件的二进制版本数,它一般有助版本号和辅版本号,一般没有release或build号。
如果失败,则返回Cardinal(-1)
functionGetFileVersion(constAFileName:
string):
Cardinal;
{$ENDIF}
2)货币和日期/时间格式化选项
这些变量初始数值用Win32API中的GetLocaleInfo函数从系统注册表取得,每个变量指定常量LOCALE_XXXX的来描述这些初始值
CurrencyString–定义浮点数转换为十进制数后的需用的货币符号,初始值来自于LOCALE_SCURRENCY.
CurrencyFormat-定义浮点数转换为十进制数后的货币符号的位置和分离程度,可能的值为:
0='$1'
1='1$'
2='$1'
3='1$'
初始值来自于LOCALE_ICURRENCY.
NegCurrFormat–定义负数浮点数转换为十进制数后的货币格式,可能的值为:
0='($1)'4='(1$)'8='-1$'12='$-1'
1='-$1'5='-1$'9='-$1'13='1-$'
2='$-1'6='1-$'10='1$-'14='($1)'
3='$1-'7='1$-'11='$1-'15='(1$)'
初始值来自于LOCALE_INEGCURR.
ThousandSeparator–多于一千时的千分位分离符位于数值的左边,初始值来自于LOCALE_STHOUSAND.#0值即使有此指示符也不应当输出指示符
DecimalSeparator–用于分离一个数的小数部分的整数,其初值来自LOCALE_SDECIMAL.DecimalSeparator必须是个非零值
CurrencyDecimals–货币值中小数点右边的小数位数,初值来自LOCALE_ICURRDIGITS.
DateSeparator–分离符:
用于分离日期数值的年、月、日部分,初值来自于LOCATE_SDATE.
ShortDateFormat–用于将日期型数值转换为适合编辑的短字符串。
对日期和时间格式化字符串的完整描述,请查阅FormatDate函数。
短日期格式应当只使用日期分离符和m,mm,d,dd,yy,和yyyy格式特定。
初值来自于LOCALE_SSHORTDATE。
LongDateFormat-用于将日期型数值转换为适合显示而不是编辑的长字符串。
对日期和时间格式化字符串的完整描述,请查阅FormatD
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- delphi中 基础包 SysUtils单元中文注释 delphi 基础 SysUtils 单元 中文 注释