读书人

pcomm.dll接收数据有有关问题

发布时间: 2013-07-01 12:33:04 作者: rapoo

pcomm.dll接收数据有问题
function recvdata(p:Pointer):Integer;stdcall
var
id:thandle;
rLen:LongInt;
PBuf:PChar;
Buf:String;
begin
Result := 0;
if endrecvthread = true then exit;
rlen := sio_iqueue(port);
PBuf := PChar(StringOfChar(' ',rlen+1));
rlen := sio_read(Port, PBuf, rlen); //读取数据
sio_flush(port,0);
If rlen = 0 Then
begin
CreateThread(nil,0,@recvdata,nil,0,id); //若无数据则跳出
exit;
end;
Buf := StrPas(PBuf);
Buf := Copy(Buf,1,rlen);

form1.memo1.Text := form1.memo1.Text + buf;
form1.memo1.SelStart := Length(form1.memo1.Text);
form1.memo1.SelLength := 0;
CreateThread(nil,0,@recvdata,nil,0,id);
exit;
end;

这段代码,当对方发送的是ASCII码时就正常,当对方发送的是HEX时,MEMO1中无任何数据显示,是哪里出问题了?
[解决办法]
function TReceiveDataBase.ToHexString(AStream: TMemoryStream; IsSpace: Boolean): String;
var
vByte: Byte;
vSpace: String;
vSize, iStart: Integer;
begin
Result := '';
iStart := 0;
vSize := AStream.Size;
while iStart < vSize do
begin
move(Pointer((integer(AStream.Memory) + iStart))^, vByte, 1);
If IsSpace Then vSpace := ' ' else vSpace := '';
if Result <> '' then Result := Result + vSpace + IntToHex(vByte, 2)
else Result := IntToHex(vByte, 2);
iStart := iStart + 1;
end;
end;
//上面是我把十六进制转换为字符串的代码! 你可以根据你自己的修改一下就行了。
[解决办法]
我觉得最好还是直接按BYTE数据读,然后根据通信协议来解释你接收的内容,数据就数据,字符就字符。
呵呵,总觉得这个pcomm.dll串口控件怪怪的,我没用过。我一般用cport,也很多人用spcomm

读书人网 >.NET

热点推荐