代码之家  ›  专栏  ›  技术社区  ›  madam mar

Delphi GetTickCount不是有效的整数

  •  -3
  • madam mar  · 技术社区  · 7 年前

    我正在尝试使用设置唯一id GetTickCount

    var
    UniqueID : DWORD;
    LastUniqueID : DWORD;
    uniqueString : string;
    begin
    
    UniqueID := GetTickCount;
    LastUniqueID := GetTickCount + 1000;
    
    uniqueString  := intTostr(LastUniqueID);//or UniqueID 
    
    end;
    

    我在上得到了无效的整数值 uniqueString := intTostr(LastUniqueID);

    Project project1.exe引发异常类EConvertError,并显示消息 “2312357250”不是有效的整数值”。

    2 回复  |  直到 7 年前
        1
  •  12
  •   David Heffernan    7 年前

    不幸的是,您显示的代码与您报告的错误消息不匹配。您的实际代码调用 StrToInt IntToStr 。我知道这一点,因为错误消息是由调用 StrToInt公司 IntToStr公司

    您的代码看起来更像这样:

    UniqueID := StrToInt('2312357250');
    

    返回有符号32位整数类型。有效值在2147483648到2147483647之间。您的值超出了的有效范围 Integer ,因此存在错误。

    如果您想要一种简单的方法来回避所有这些范围问题,那么使用 Int64 DWORD 整数 ,并呼叫 StrToInt64 .

    UniqueID := GetTickCount;
    LastUniqueID := GetTickCount + 1000;
    

    GetTickCount 。这两个调用可能会产生不同的值。确实,如果 GetTickCount

    还有更多的麻烦 GetTickCount + 1000 GetTickCount GetTickCount64 为了避免这个陷阱。

        2
  •  1
  •   Dsm    7 年前

    问题是2312357250太大了。虽然它作为DWORD有效,但十六进制表示89D3C582相当于负数,DWORD无法表示负数,因此消息。