关于串口通讯,动态创建spcomm,怎样知道接收的数据长度
2楼: 只要不超出缓冲区,在他接收函数的参数里都有阿 如免费服装店管理软件
3楼: procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
begin
end;
Buffer是他接受到的数据的地址,BufferLength是他的长度。使用时注意Buffer的类型
4楼: 我说的是动态创建SPCOMM控件,怎样进行事件处理?
动态创建了SPCOMM,我怎样发送数据和接收数据?
5楼: 判断长度与内容应该跟动态没有关系吧,只要读取相应的缓冲区中的数据不就行了吗?
6楼: to:fthanyong
怎样读取缓冲区,因为动态建立以后,怎样用进行事件处理?
企业管理软件版7楼: spcom1:= TComm.Create;
spcom1.onReceiveData:= Comm1ReceiveData;
这里Comm1ReceiveData是你编写的事件处理程序。
8楼: 这里有串口控件
http://www.anylib.com
9楼: to YANGWEI0308
我想知道接收数据缓冲中的长度,怎么知道?
10楼: spcomm的缓冲区长度默认为2048.不过我想知道你为什么要动态创建spcomm呢?
11楼: 动态创建的SPCOMM共用一个串口发送和接收事件
创建时不同的串口赋不同的标识comm[i].tag:=i;
接收时i:=Tcomm(sender).Tag;就是产生接收的串口
12楼: 我要的不是缓冲区的长度,而是已接收的数据长度。 如财务软件免费下载
13楼: lxw5214已经说过了,BufferLength就是已接收数据的长度
//串口数据接收
procedure TForm1.COMReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
var s:string;
begin
setlength(s,bufferlength);
move(buffer^,s[1],bufferlength);
memo1.text:=s;
end;
企业管理软件版14楼: 没有必要动态创建吧,因为全部是串行处理数据的,需要用到线程么?用线程,你还必须要用到临界量。麻烦。建议用缓冲池,而comm通讯中数据的接收发送在主程序里实现就行了,这样简单一点,^_^
15楼: 多人接受答案了。