首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TComPort代理怪异

TComPort代理怪异
EN

Stack Overflow用户
提问于 2012-05-10 21:44:32
回答 1查看 749关注 0票数 1

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

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

我使用具有事件onPacket()的TComDataPacket组件,如果使用调试器,我可以看到字符串ok,但如果使用pos()搜索或使用ShowMessage()显示字符串,则字符串非常短,并且看不到任何#00

我尝试使用RxChar事件,但没有被触发,并且RxBuf给出了访问冲突。

我使用的是Delphi XE 2,是组件有什么问题,还是我做错了什么?

LE :如果我不在方法的末尾插入睡眠,事件onPacket()就会冻结。下面是我的代码:

代码语言:javascript
运行
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-12 08:35:51

这里的问题是字符串。在XE2中,string是unicode字符串。在Delphi 2007及更低版本中,string为ansi字符串。它们的大小是不同的。您必须通过检查TComport源代码来确保这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10535316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档