delphi – 为什么格式崩溃时,除了“%s”之外的任何变体?
发布时间:2020-12-15 04:29:26 所属栏目:大数据 来源:网络整理
导读:我正在使用 SysUtils.Format 功能和变体值,我发现这个功能只有在格式字符串为%s时才有效.我检查了有关Format函数的文档,但是不存在对变量值如何处理的任何引用. 考虑这个简单的应用: {$APPTYPE CONSOLE}uses Variants,SysUtils;procedure TestFormat;var v
我正在使用
SysUtils.Format 功能和变体值,我发现这个功能只有在格式字符串为%s时才有效.我检查了有关Format函数的文档,但是不存在对变量值如何处理的任何引用.
考虑这个简单的应用: {$APPTYPE CONSOLE} uses Variants,SysUtils; procedure TestFormat; var v : Variant; begin v:=100; writeln(Format('The VarType of v is %s',[VarTypeAsText(VarType(v))])); writeln(Format('The value of v is %s',[v]));//ok v:='100'; writeln(Format('The VarType of v is %s',[v]));//ok v:=100; writeln(Format('The VarType of v is %s',[VarTypeAsText(VarType(v))])); writeln(Format('The value of v is %d',[v]));//raise a EConvertError exception EConvertError: Format '%d' invalid or incompatible with argument end; begin try TestFormat; except on E: Exception do Writeln(E.ClassName,': ',E.Message); end; readln; end. 这是这个功能的错误还是简单的限制? 我在Delphi 5,Delphi 2007和Delphi XE中检查了这个行为. 解决方法
这是功能的限制.在Delphi XE中,SysUtils的相关部分从10870行开始,如下所示:
@CvtVariant: CMP CL,'S' JNE @CvtError 这被称为任何变体参数. CL寄存器具有该特定参数的格式字符串所需的类型,对于与“S”不同的任何异常,引发异常. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |