大家好:
    在Spcomm控件的数据接受事件里如下:
    procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
                                        BufferLength: Word);
    begin
    
    end;
请问:一次接收的数据的长度————BufferLength 是多大????最长是8位对吗??
     请高手指点。

解决方案 »

  1.   

    >>一次接收的数据的长度————BufferLength 是多大??
    bufferLength就是對應每次接收到的數據長度, 不确定的, 每次接收到數據, 就觸發ReceiveData事件, 你可檢查 BufferLength的大小, 來确定當次接收到多少數據!
      

  2.   

    aiirii(ari)
           您好:
       我的Spcomm控件的数据接受代码如下:procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
     tmpArray:array[0..4096] of Byte;
     i: DWORD;
     tmpStr:string;
     wchb:string;
     pStr:PChar;
    begin
      if Check1.Checked  then       //if语句是按十六进制接受的代码;
      begin
       pStr:=Buffer;
       tmpStr:=string(pStr);
       Dec(PStr);
       for i:=0 to Length(tmpStr)-2 do
        begin
         inc(PStr);
         tmpArray[i]:=Byte(PSTR^);
         wchb:=wchb+IntToHEX(ord(tmpArray[i]),2);
        end;
        memo2.Lines.Add(wchb);
       exit;
      end;
      pStr:= Buffer;                   //这儿是按字符串接受的代码;
      memo2.Lines.Add(pStr);
    end;为什么在接受8位以内数据时能用,8位以上时就不能用呢?列如 :我让它按十六进制接受
     ‘00AA18AA00AAA0AA14AACAAA66’时,总是出错。错误提示是:“Access violation
    at address 00403EDA in module "project1.exe",Read of address 00000054”。
    请问这是什么意思啊?是不是接受代码有错啊???? 您帮俺看看好吗?
      

  3.   

    var 
      viewstring:string; 
      i:integer;
      rbuf,sbuf:array[0..100] of byte; 
    begin 
     
    viewstring:='';move(buffer^,(pchar(@rbuf))^,bufferlength);
    memo1.lines.add(inttostr(BufferLength));for i:=1 to bufferlength doviewstring:=viewstring+chr(rbuf[i])+' ';
    //chr(rbuf[i])+'';
    //inttohex(rbuf[i],2)+' ';viewstring:='接收'+viewstring;memo1.lines.add(viewstring);memo1.lines.add(' ');
      

  4.   

    请再看看俺的问题代码好吗????————急急急急急!!!!
    我的Spcomm控件的数据接受代码如下:procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
     tmpArray:array[0..4096] of Byte;
     i: DWORD;
     tmpStr:string;
     wchb:string;
     pStr:PChar;
    begin
      if Check1.Checked  then       //if语句是按十六进制接受的代码;
      begin
       pStr:=Buffer;
       tmpStr:=string(pStr);
       Dec(PStr);
       for i:=0 to Length(tmpStr)-2 do
        begin
         inc(PStr);
         tmpArray[i]:=Byte(PSTR^);
         wchb:=wchb+IntToHEX(ord(tmpArray[i]),2);
        end;
        memo2.Lines.Add(wchb);
       exit;
      end;
    end;为什么在接受8位以内数据时能用,8位以上时就不能用呢?列如 :我让它按十六进制接受
     ‘00AA18AA00AAA0AA14AACAAA66’时,总是出错。错误提示是:“Access violation
    at address 00403EDA in module "project1.exe",Read of address 00000054”。
    请问这是什么意思啊?是不是接受代码有错啊???? 您帮俺看看好吗?
      

  5.   

    试试下面的方法var
       i:integer;
       wchb:string;
       tmpArray:array[0..4096] of Byte;
    begin
       wchb:='';
    if Check1.Checked  then       //if语句是按十六进制接受的代码;
    begin
       move(buffer^,pchar((@tmpArray)^),bufferlength);
       for i:=0 to bufferlength-1 do
       begin
          wchb:=wchb+ inttohex(tmpArray[i],2);
       end;
    end;