我在delphi中使用mscomm控件开发一个串口通讯的程序,下位设备是一种手持pos,用C51开发的。现在碰到一个问题:手持pos机通过串口上传到主机的数据我不知道如何获得,在delphi中使用mscomm控件读取串口缓冲区是一个olevariant类型的变量,但获取之后我如何将其中的数据解析出来呢?
   我程序中的部分代码:
     iCount:=mscomm1.inbufcount;  //得到串口缓中区中的字符数
     varContent:=mscomm1.input;   //获得串口缓冲区中的内容(varContent为一个Variant类型的变量)
   以上代码中能够获得串口缓冲区中的字符数,但用variant变量得到的内容我不知如何进行解析。我想将他转换成字符串
     strTemp:=vartostr(varContent);  
    但得到的是一个空字符串。可我判断variant变量是否为空时确实不是空
    bEmpty:=VarIsEmpty(varContent); //得到的值是false,不为空
    这我就不知道如何进行处理了,那位高手做过此方面的东西,还请赐教一二,不胜感激!
 (下位的手持pos向串口发送数据时是按照我定义的结构进行发送的,c51写的)

解决方案 »

  1.   

    就这样:var
      buff : widestring;
    begin
      buff := mscomm1.input;
    end;
      

  2.   

    procedure TFCOMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
      rbuf:Buffer;
      viewstring:string;
    begin
       viewstring:='';
       move(buffer^,rbuf,bufferlength);
       for i:=0 to bufferlength-1 do
       begin
         viewstring:=viewstring+inttohex(rbuf[i],2);
       end;
    end;
      

  3.   

    关于delphi中串口通讯控件的选择
    mscomm:微软的东西,ActivX控件,使用简单,在VB中带的,性能一般,由于是ActivX控件,打包时需要注册好多信息,不推荐使用。
    spcomm:比较好的vcl,算是比较专业的,解剖了一下,功能比较完善。
    TurboPower:公认的专业通讯控件。可以到其站点下载,开放源码了。
    我在制作串口通讯软件时三种都用过,最终全部使用TurboPower!所以也推荐大家使用它。
    写了个例子,基本的串口通讯都可以实现,可提供参考。
    下载地址:http://www.kaer.cn/default.aspx(网站安全性较差,经常当机,如果急用,mail我)
    多多指正:[email protected]