Delphi t导入代理wierd

Delphi t导入代理wierd,delphi,tcomport,Delphi,Tcomport,我有一个SMS网关,我使用AT命令控制该组件工作正常,但我无法正确解析从设备接收到的字符串 首先,我使用硬件流控制,这对我有什么影响 我使用TComDataPacket组件,该组件有一个事件onPacket(),其中我收到一个字符串。如果我使用调试器,我可以看到字符串ok,但如果我使用pos()搜索或ShowMessage()显示字符串,字符串非常短,我看不到任何#00 我尝试使用RxChar事件,但未被触发,RxBuf给出访问冲突 我正在使用DelphiXe2。组件有什么问题吗?或者我做错了什

我有一个SMS网关,我使用AT命令控制该组件工作正常,但我无法正确解析从设备接收到的字符串

首先,我使用硬件流控制,这对我有什么影响

我使用TComDataPacket组件,该组件有一个事件onPacket(),其中我收到一个字符串。如果我使用调试器,我可以看到字符串ok,但如果我使用pos()搜索或ShowMessage()显示字符串,字符串非常短,我看不到任何#00

我尝试使用RxChar事件,但未被触发,RxBuf给出访问冲突

我正在使用DelphiXe2。组件有什么问题吗?或者我做错了什么

LE:如果我没有在方法末尾插入睡眠,那么事件onPacket()将冻结。下面是我的代码:

procedure TfrmMain.comPacketPacket(Sender: TObject; const Str: string);
var
  S,numar,coord : string;
  i,poi,rr,j,tmp2 : Integer;
const
  Readul = 'READ|';
  delim  = 'gps=';
  CMG = 'CMGL';
begin
  if pos('CMTI',Str) > 0 then
                          SendATCommand('AT+CMGL="ALL"');
  for i := 1 to Length(Str) do
    if Str[i] in ['A'..'Z','a'..'z','0'..'9','=','.'] then S := S + Str[i]
    else if Str[i] = '"' then S := S + '|';
    repeat
       poi := Pos('gps=',S);
       if poi > 0 then
       begin
          j := poi;
          repeat
            Dec(j);
            rr := PosEx(Readul,S,j);
            if rr >= poi then  rr := 0;
          until (rr>0) or (j = 1);
          numar := Copy(S,rr+Length(Readul)+1,PosEx('|',S,(rr+Length(Readul)+1)) - (rr + Length(Readul) + 1));
          ShowMessage('Trimit la numarul ' + numar);
          coord := Copy(S,poi + Length(delim),PosEx(CMG,S,poi) - poi - Length(CMG));
          S := Copy(S,poi + Length(delim),Length(S));
       end;
    until poi = 0;
    Sleep(1500);
end;

这里的问题是字符串。 在XE2中,字符串是unicode字符串。 在Delphi2007及以下版本中,字符串是ansi字符串。 它们的大小不同。
您必须通过检查导入源来确保这一点。

这里的问题是字符串。 在XE2中,字符串是unicode字符串。 在Delphi2007及以下版本中,字符串是ansi字符串。 它们的大小不同。
您必须通过检查导入源来确保它。

您使用的是哪个版本?有几个相互竞争的版本。许多版本的数据包组件都有严重的错误。我悲伤而谦卑地承认我没有使用数据包,因此我对从未修复数据包错误感到厌恶。避免包装。不要它。完成。@WarrenP此组件的最新版本我相信该版本在Unicode delphi上仍然存在数据包错误。@WarrenP还有更好的吗?您能在这里展示一个显示但不适用于Pos/ShowMessage的示例字符串吗?您使用的是哪个版本?有几个相互竞争的版本。许多版本的数据包组件都有严重的错误。我悲伤而谦卑地承认我没有使用数据包,因此我对从未修复数据包错误感到厌恶。避免包装。不要它。完成。@WarrenP此组件的最新版本我相信该版本在Unicode delphi上仍然存在数据包错误。@WarrenP还有更好的吗?您能在这里展示一个显示但不适用于Pos/ShowMessage的示例字符串吗?