var
  Form1: TForm1;
  viewstring:string;
  rbuf,sbuf:array[0..100] of byte;
implementation{$R *.dfm}procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
var i:integer;
begin
    viewstring:='';
    move(buffer^,(pchar(@rbuf))^,bufferlength);
    new(buffer);
    for i:=1 to bufferlength do
      begin
        if chr(rbuf[i])='cb' then comm1.StopComm;
        viewstring:=viewstring+chr(rbuf[i]);
      end;
    memo1.Text:=viewstring;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
    self.Comm1.StartComm;
    if not comm1.WriteCommData('3a',1) then
      begin
        showmessage('');
        comm1.StopComm;
      end;
end;

解决方案 »

  1.   

    if not comm1.WriteCommData('3a',1) then
    修改如下:
    if not comm1.WriteCommData('3a',SizeOf('3a')) then
    new(buffer);好象沒有必要!rbuf,sbuf:array[0..100] of byte;好象太小, 但根據實際情況可能也不會有問題!!if chr(rbuf[i])='cb' then comm1.StopComm;這句永遠不能發生!
      

  2.   

    to aiirii(ari)我是想判断受到cb后,传输结束,应该在那里写
      

  3.   

    IntToHex(bArray[0], 2)='BC';
    另外,把判断写成消息,放到ReceiveData外面,ReceiveData里面发送消息
      

  4.   

    协议是这样的,它处于监听状态,我给它发送3a,他受到3a后开始给我传输数据,我收到bc时
    传输结束
      

  5.   

    var
      Form1: TForm1;
      viewstring:string;
      rbuf,sbuf:array[0..100] of byte;
    implementation{$R *.dfm}procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var i:integer;
    begin
      viewstring:='';
      move(buffer^,pchar((@rbuf)^),bufferlength)
      for i:=1 to bufferlength do
        begin
          viewstring:=viewstring+ inttohex(rbuf[i],2);
        end;
      memo1.Text:=viewstring;
    end;end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Comm1.StartComm;
      comm1.WriteCommData('3a',2);
      while (viewstring<>'cb' ) and (Now-dtTmp)<(10000 /(24*60*60*1000)) do
      begin
        Application.ProcessMessages;
      end;
      comm1.StopComm;
    end;
      

  6.   

    它传bc给你说明传输结束,那就没有必要去stopcomm了,如果你还要再次向comm口发送询问的话。