本帖最后由 qq673539743 于 2009-08-07 12:04:32 编辑

解决方案 »

  1.   

    bufferlengthx
    没赋值直接用参数里面的BufferLength
      

  2.   

    procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; 
      BufferLength: Word); 
    var 
      strreceive:string; 
      bufferlengthx:word; 
    begin 
      setlength(strreceive,bufferlength); 
      move(buffer,pchar(strreceive)^,bufferlength); 
      memo1.Lines.add(strreceive);
    end;改成这样还是不行,接收到的数据是乱码...
      

  3.   

    Comm1的属性设置,是不是按指定的参数设的?波特率,停止位 之类的东西
      

  4.   

    这本书也许对你有用:
    http://download.csdn.net/source/1523158
      

  5.   

    如果波特率之类的设置不对那发送数据就不会对了吧,还有就是发现不论发什么数据接收的都是 A8 13 16 00    和 E8 50 16 00    比如我发第一次发  01 08 86 3d    就接到A8 13 16 00 再发就接到E8 50 16 00     
      

  6.   

    procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);beginstrreceive:='';
     viewstring:='';
      sleep(100);   move(buffer^,rbuf,BufferLength);
       for i:=1 to bufferlength do
         viewstring:=viewstring+inttohex(rbuf[i],2)+' ';
       form1.Memo1.Lines.Add(viewstring);
       form1.Memo1.Lines.Add(' ');end;接收改成这个就可以了..move(buffer^,rbuf,BufferLength);就这个move搞得
    问一下buffer后面加个^是什么意思啊?buffer是指针在delphi中指针不是地址吗?
      

  7.   

    buffer后面加个^就是指针指向的内存块(指针指向的内容),指针是地址