procedure TMainForm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
var
  rbuf:array of byte;
  i:integer;
  msg:string;
begin
  SetLength(rbuf,BufferLength);
  move(Buffer^,pchar(@rbuf)^,BufferLength);
  for i:=1 to BufferLength-1 do
   msg:=msg+inttohex(rbuf[i],2);  //这里为什么出错阿
  showmessage(msg);
end;

解决方案 »

  1.   

    SetLength(rbuf, BufferLength);
      move(Buffer^,rbuf[0],BufferLength);
    //             ~~~~~~~
      for i:=0 to BufferLength-1 do
    //      ~~
       msg:=msg+inttohex(rbuf[i],2);  //这里为什么出错阿
      showmessage(msg);
      

  2.   

    应该改为:
    procedure TMainForm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
    var
      rbuf:array of byte;
      i:integer;
      msg:string;
    begin
      SetLength(rbuf,BufferLength);
      move(Buffer^,pchar(@rbuf)^,BufferLength);
      for i:=1 to BufferLength-1 do
       msg:=msg+Pchar(inttohex(rbuf[i],2));  
      showmessage(msg);
    end;