本人使用SPCOMM控件来接收数据,以下代码是本人在网上找的.为什么不能编译呢.请指点一下.procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
var
 i:integer;
 viewstring:String;
 rbuf : array[0..31] of Char;
begin
viewstring:='';
move(buffer^,@rbuf^,bufferlength);//编译报错.
viewstring:=rbuf;//
memo1.lines.add(viewstring);end;
我的意思是想将接收的数据放到一个String类型变量中去.

解决方案 »

  1.   

    不看你的了,我给你一段我的一段代码好了,完全满足了你的需要,你把不需要的部分拿掉就好了
    procedure TDM.CommReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
      i:Integer;
      ReceiveStr:string;
      rbuf:array[1..6] of byte;
      Channel:array[1..4] of string;
      C:array[1..4] of Integer;
    begin
      ReceiveStr:='';
      Move(Buffer^,PChar(@rbuf)^,BufferLength);
      for i:=1 to bufferlength do
      ReceiveStr:=ReceiveStr+inttohex(rbuf[i],2);  if Length(ReceiveStr)=10 then   {握手信息[RS]验证}
       GetHand:=Copy(ReceiveStr,7,2);//取'5B5253005D'中的'00',设备指纹信息  if Length(ReceiveStr)>10 then 
      if Copy(ReceiveStr,1,12)='5B53'+GetHand+'43015D' then
      begin
        Channel[1]:=Copy(ReceiveStr,13,4);
        Channel[2]:=Copy(ReceiveStr,17,4);
        Channel[3]:=Copy(ReceiveStr,21,4);
        Channel[4]:=Copy(ReceiveStr,25,4);    C[1]:=StrToInt('$'+Channel[1]); //16进制字符换算成10进制数值
        C[2]:=StrToInt('$'+Channel[2]);
        C[3]:=StrToInt('$'+Channel[3]);
        C[4]:=StrToInt('$'+Channel[4]);    IsData:=True ;
        for i:=1 to 4 do
        begin
          Y_show[i]:=C[i]/SendCharData(i);{传递纵坐标给子窗口}
          Debug[i]:= C[i];{供调0调100用}
        end;
      end;end;
      

  2.   

    其实很简单, 这样就行了
    procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
      viewstring:String;
    begin
      SetString(viewstring, PChar(Buffer), BufferLength);
      memo1.lines.add(viewstring);
    end;
      

  3.   

    SetString这个函数没用过,谢谢了.
      

  4.   

    我用的spcomm,非常好用。上面代码也是我的一个串口数据采集用到的。