来自Indy10.2.5的一个函数,使用了一个危险的做法,可能影响到通讯。看谁能看出来。
function TIdIOHandler.ReadLongWord(AConvert: Boolean): LongWord;
var
  LBytes: TIdBytes;
begin
  ReadBytes(LBytes, SizeOf(LBytes), False);
  Result := BytesToLongWord(LBytes);
  if AConvert then begin
    Result := GStack.NetworkToHost(Result);
  end;
end;

解决方案 »

  1.   

    TIdBytes是什么类型?会缓存溢出??
      

  2.   


     回  :  Array of Byte;  
      

  3.   

    ReadBytes(LBytes, SizeOf(LBytes), False);读用了LBytes 而不是LongWord
    64位系统和32位会不一致
      

  4.   


    是的。起码到Delphi2010还不支持64位,但64位离我们不远了。编写代码需要严谨和细心,不要等到64位到来之时才突然发现很多代码无法正常了。
      

  5.   

    我在http://blog.csdn.net/nhconch/archive/2009/11/20/4840070.aspx有说明。
    结贴!