利用SPCOMM控件在接收到较长数据时出现通讯中断。(50分)

  • 主题发起人 主题发起人 apolloone
  • 开始时间 开始时间
A

apolloone

Unregistered / Unconfirmed
GUEST, unregistred user!
利用SPCOMM控件在接收到较长数据时出现通讯中断。
具体接收代码如下:
var
RBuf,SBuf:Array[1..16] Of Byte;

procedure TMainForm.RS232ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var I:Integer;
ViewString1:String;
begin
ViewString1:='';
Move(Buffer^,PChar(@RBuf)^,BufferLength); //运行到这就死掉了。
For I:=1 To BufferLength Do
ViewString1:=ViewString1+chr(RBuf)+'';
ShowMessage(ViewString1);
end;

但接收到长数据时(我测试的接收数据有72个字节),就在运行
Move(Buffer^,PChar(@RBuf)^,BufferLength); 这条语句时就死掉了。
是不是需要先清空缓存? 如何清空呢?

大家帮我想想办法!
谢谢!
 
你定义的BUFFER固定而且太小,改为如下吧:
var
RBuf,SBuf:Array Of Byte;

procedure TMainForm.RS232ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var I:Integer;
ViewString1:String;
begin
ViewString1:='';
SetLength(RBuf,BufferLength);
Move(Buffer^,PChar(@RBuf)^,BufferLength); //运行到这就死掉了。
For I:=1 To BufferLength Do
ViewString1:=ViewString1+chr(RBuf[I-1])+'';
ShowMessage(ViewString1);
end;
 
应该是数组定义太小的问题了,可以在事件里进行设置,setlength(RBuf,BufferLength);
 
16太小啦。我一般设好几K
 
后退
顶部