F
flyingwater007
Unregistered / Unconfirmed
GUEST, unregistred user!
一个使用串口来实现电话计费的小程序,程序对交换机送出话单处理如下:
procedure TBillForm.MsgCommProcess(Var Message: TMessage);
var
Coms: TComstat;
cbNum, ReadNumber, lpErrors: DWord;
Read_Buffer: array[0..1023] of Char;
begin
if ClearCommError(Comm_File, lpErrors, @Coms) then
begin
cbNum := Coms.cbInQue;
ReadFile(Comm_File, Read_Buffer, cbNum, ReadNumber, Lp_OverLap);
MsgDisplay(Read_Buffer, ReadNumber);//计费过程
SetEvent(Post_Event);
end;
end;
其中MsgDisplay定义为procedure TBillForm.MsgDisplay(StrChar; LenWord);
以前计费没任何问题,这次一个鬼华为的交换机送出的话单read_ buffer中含有3个#0字符(如#0,‘,’,‘2’,‘1’,‘7’,‘8’,#0......#13,#10,#0)
用MsgDisplay过程之后,read_buffer变为,2178,char转换pchar时系统会默认#0是结束,结果只拷贝了#0前面的部分字符
问:1、read_buffer里的#0字符安全的去掉(我试过在转换前把#0字符置换成char(9)等
之类,好象不行)
2、有没有方法可以自己指定结束字符,象上面指定#10为结束字符而#0无效的话我就可以
得到完整的话单
求哪位大哥大姐指点则个
procedure TBillForm.MsgCommProcess(Var Message: TMessage);
var
Coms: TComstat;
cbNum, ReadNumber, lpErrors: DWord;
Read_Buffer: array[0..1023] of Char;
begin
if ClearCommError(Comm_File, lpErrors, @Coms) then
begin
cbNum := Coms.cbInQue;
ReadFile(Comm_File, Read_Buffer, cbNum, ReadNumber, Lp_OverLap);
MsgDisplay(Read_Buffer, ReadNumber);//计费过程
SetEvent(Post_Event);
end;
end;
其中MsgDisplay定义为procedure TBillForm.MsgDisplay(StrChar; LenWord);
以前计费没任何问题,这次一个鬼华为的交换机送出的话单read_ buffer中含有3个#0字符(如#0,‘,’,‘2’,‘1’,‘7’,‘8’,#0......#13,#10,#0)
用MsgDisplay过程之后,read_buffer变为,2178,char转换pchar时系统会默认#0是结束,结果只拷贝了#0前面的部分字符
问:1、read_buffer里的#0字符安全的去掉(我试过在转换前把#0字符置换成char(9)等
之类,好象不行)
2、有没有方法可以自己指定结束字符,象上面指定#10为结束字符而#0无效的话我就可以
得到完整的话单
求哪位大哥大姐指点则个