Delphi使用SuperObject解析Json提示“Integer overflow”解决办法

将superobject.pas源代码中的如下代码:

01

02

03

04

05

06

07

08

09

10

11

12

class function TSuperAvlEntry.Hash(const k: SOString): Cardinal;

var

  h: cardinal;

  i: Integer;

begin

  h := 0;

{$Q-}

  for i := 1 to Length(k) do

    h := h*129 + ord(k[i]) + $9e370001;

{$Q+}

  Result := h;

end;

修正为:

01

02

03

04

05

06

07

08

09

10

11

12

{$UNDEF SaveQ} {$IFOPT Q+} {$Q-} {$DEFINE SaveQ} {$ENDIF}

class function TSuperAvlEntry.Hash(const k: SOString): Cardinal;

var

  h: cardinal;

  i: Integer;

begin

  h := 0;

  for i := 1 to Length(k) do

    h := h*129 + ord(k[i]) + $9e370001;

  Result := h;

end;

{$IFDEF SaveQ} {$Q+} {$UNDEF SaveQ} {$ENDIF}

重新编译后即可实现正常解析。

posted on 2015-04-01 08:51  martian6125  阅读(428)  评论(0编辑  收藏  举报