加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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”不同的任何异常,引发异常.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读