var     
  fcomm:   TFCOMM;     
  viewstring:string;     
  rbuf,sbuf:array[1..8]   of   byte;     
    
  //打开串口     
    
  procedure   TFCOMM.FormShow(Sender:   TObject);     
  begin     
  comm1.StartComm;     
  end;     
  //关闭串口     
  procedure   TFCOMM.FormClose(Sender:   TObject;   var   Action:   TCloseAction);     
  begin     
  comm1.StopComm;     
  end;     
    
  //接收过程     
  procedure   TFCOMM.Comm1ReceiveData(Sender:   TObject;   Buffer:   Pointer;BufferLength:   Word);     
  var     
  i:integer;     
  begin     
  viewstring:=‘’   ;     
  move(buffer^,pchar(@rbuf)^,bufferlength);     
  for   i:=1   to   bufferlength   do     
  viewstring:=viewstring+   inttohex(rbuf[i],2)+‘’   ;     
  viewstring:=‘接收’+   viewstring;     
  memo1.lines.add(viewstring);     
  memo1.lines.add(‘’   );     
  end;   
这段代码在delphi 中读出的串口数据是什么数据类型?

解决方案 »

  1.   

    byte类型,然后转为十六进制显示
      

  2.   

    如果刚开始做串口编程,那么用控件吧 mscomm,apro控件包中的apdcomport都不错
      

  3.   

    SPCOMM吧,觉得还是很好用的
    API+VCL结构的
      

  4.   

    CreateFile
    ReadFile
    WriteFile
    足够了,何必那么麻烦
      

  5.   

    lw549(那个孩子他爹) 还是有道理的, 我用过了MSCOMM、SPCOMM后,发现还是API简介点。
      

  6.   

    我也是用API来操作的,搞个手机通读群发短信.
    用API的优点是不用带上OCX控制,爽..
      

  7.   

    function readdata(pub_handle: cardinal; var read_str: pchar): cardinal;
    var
      DUFF: array[0..50] of CHAR; //存放读出的数据放在缓冲区该缓冲区中
      xx: cardinal; //实际读取的字节数
      BCC: BOOLEAN;
      ss_xx, ss_yy: string;
      LAPPED: pOVERLAPPED;
    begin
      bcc := readfile(pub_handle, duff, 50, XX, nil);
      if not bcc then
      begin
        result := 0;
        read_str := '';
      end else //not bcc
      begin
        if xx > 0 then
        begin
          ss_yy := duff;
          ss_xx := copy(ss_yy, 1, xx);
          read_str := pchar(ss_xx);
          result := xx;
          duff := '';
        end else //xx>0  表示有数据读出
        begin
          read_str := '';
          result := 0;
          duff := '';
        end;
      end; //not bcc
    end;
      

  8.   


      Tcom_para = record
        tt_com: pchar; //COM 口
        tt_buad: integer; //波特率
        tt_even: pchar; //奇偶校验   0-4=no,odd,even,,space
        tt_stop: integer; //停止位
        tt_size: integer; //数据位
      end;const
      VER_NT_WORKSTATION = $00000001;
      VER_NT_DOMAIN_CONTROLLER = $00000002;
      VER_NT_SERVER = $00000003;  VER_SERVER_NT = $80000000;
      VER_WORKSTATION_NT = $40000000;  VER_SUITE_SMALLBUSINESS = $00000001;
      VER_SUITE_ENTERPRISE = $00000002;
      VER_SUITE_BACKOFFICE = $00000004;
      VER_SUITE_COMMUNICATIONS = $00000008;
      VER_SUITE_TERMINAL = $00000010;
      VER_SUITE_SMALLBUSINESS_RESTRICTED = $00000020;
      VER_SUITE_DATACENTER = $00000080;
      VER_SUITE_SINGLEUSERTS = $00000100;
      VER_SUITE_PERSONAL = $00000200;
      VER_SUITE_BLADE = $00000400;
      

  9.   

    type
      POSVersionInfoEx = ^TOSVersionInfoEx;
      OSVERSIONINFOEXA = record
        dwOSVersionInfoSize: DWORD;
        dwMajorVersion: DWORD;
        dwMinorVersion: DWORD;
        dwBuildNumber: DWORD;
        dwPlatformId: DWORD;
        szCSDVersion: array[0..127] of AnsiChar;
        wServicePackMajor: WORD;
        wServicePackMinor: WORD;
        wSuiteMask: WORD;
        wProductType: BYTE;
        wReserved: BYTE;
      end;
      OSVERSIONINFOEXW = record
        dwOSVersionInfoSize: DWORD;
        dwMajorVersion: DWORD;
        dwMinorVersion: DWORD;
        dwBuildNumber: DWORD;
        dwPlatformId: DWORD;
        szCSDVersion: array[0..127] of WideChar;
        wServicePackMajor: WORD;
        wServicePackMinor: WORD;
        wSuiteMask: WORD;
        wProductType: BYTE;
        wReserved: BYTE;
      end;
      OSVERSIONINFOEX = OSVERSIONINFOEXA;
      TOSVersionInfoEx = OSVERSIONINFOEX;
      

  10.   

    to lw549:
    你还缺少填写DCB,API相对还是复杂点.建议用SPCOMM吧
      

  11.   

    现成的控件,使用方便,这些年我一直用它.最好别用ocx控制,用delphi的第三方控件
    吧.
      

  12.   

    偶用Spcomm,简单顺手,简单的几行代码就ok了.言归正传:读出的串口数据是byte类型,然后十六进制显示.