要求能实现对PC机的串行口进行直接操作,请问应该怎么实现?最好有原代码。

解决方案 »

  1.   

    我这里刚好有我以前用过的一段代码,希望对你有帮助//这里是串口通信的完整代码
    unit Comminterfaceuses
      windows,messages,sysutils,classes,graphics,controls,forms,dialogs,stdctrls;const
      WM_COMMNOTIFY=WIN_USER+1;type    TForm1=class(TForm)
         procedure FormCreate(Sender:TObject);
       private
         procedure  CommInitialize;
         procedure  MsgCommProcess(var Message:TMessage):message WM_COMMNOTIFY;
       public 
      
       end;   //线程声明
       TComm=class(TThread)
       protected
         procedure  Execute;override;
       end;var
      Form1:TForm1;
      hCom,Post_Event:THandle;
      lpol:Poverlappped;implementation{$R *.DFM}  
     
    procedure  TComm.Execute;//线程执行
    var
      dwEvtMask:DWord;
      Wait:boolean;
    begin
      FillChar(lpol,SizeOf(Toverlappped),0);
      While true do 
      begin
        //等待串口事件 
        Wait:=WaitCommEvent(hCom,dwEvtMask,lpol);
        if Wait then
          //等待同步事件置位
          WaitForSingleObject(Post_Event,infinite);
          //同步事件复位 
          ResetEvent(Post_Event);
          //发送消息
          PostMessage(Form1.Handle,WM_COMMNOTIFY,0,0);   end; 
    end; //初试化串行口 
    procedure  TForm1.CommInitialize;  
    var
      lpDCB:TDCB;
    begin
      hCom:=CreateFile('com2',Generic_Read or Generic_Write,0,nil,Open_Existing,File_Attribute_Normal or File_Flag_OverLapped,0)
      if hCom=invalid_handle_value then
      begin
        ShowMessage('Unable to Open COM2.');
        Exit;
      end;
      SetupComm(hComm,4096,4096);//设置输入、输出缓冲区的大小为4096字节
      GetCommState(hCom,lpDCB); 
      lpDCB.baudrate:=2400;
      lpDCB.StopBits:=1;
      lpDCB.ByteSize:=8;
      lpDCB.Parity:=EvenParity;//偶校验
      SetCommState(hCom,lpDCB);
      SetCommMask(hCom,ev_rxchar);  //指定串口事件为接受到字符
       
    end; procedure  TForm1.MsgCommProcess(var Message:TMessage);
    var 
      Clear:boolean;
      Coms:TComStat;
      cbNum,ReadNumber,lpErrors:DWord;
      Readd_Buffer:array [1..100] of char;
    begin
      Clear:=ClearCommError(hCom,lpErrors,@Coms);
      if Clear then
      begin
        cbNum:=Coms.cbInQue;
        ReadFile(hCom,Read_Buffer,cbNum,ReadNumber,lpol);
        SetEvent(post_Event);
      end;
    end;procedure  TForm1.FormCreate(Sender:TObject);
    begin
      CommInitialize;
      Post_Event:=CreateEvent(nil,true,true,nil);//创建同步事件
      TComm.Create(false);//创建串口监视线程
    end;
      

  2.   

    To honkily(CODING): 
       高手啊!
       这正是我要的,谢谢了!