楼主,你好!
你说的功能很容易实现,先看看下边的文章:VC知识库文章 - 使用Win32创建串口通讯程序http://vckbase.com/document/viewdoc/?id=1114

解决方案 »

  1.   

    对于串口读写数据,缓冲区完全可以用char readbuf[xxx];char writebuf[xxx];
    HANDLE hCom;
    hCom = CreateFile("COM1:",GENERIC_READ | GENERIC_WRITE...,OPEN_EXSITING,...);
    ReadFile(hCom,readbuf,xxx,....);
    WriteFile(hCom,writebuf,xxx,...);
    CloseHandle(hCom);
      

  2.   

    VARIANT variant_inp;
        COleSafeArray safearray_inp;
        LONG len,k;
        BYTE rxdata[2048]; 
        CString strtemp1;
        if(m_ctrlComm.GetCommEvent()==2)
        {
    short n;
    n = m_ctrlComm.GetInBufferCount();   
    if(n >8 )
    {
    variant_inp=m_ctrlComm.GetInput(); 
                safearray_inp=variant_inp;
                len=safearray_inp.GetOneDimSize();
                for(k=0;k<len;k++)
    {
                    safearray_inp.GetElement(&k,rxdata+k);
    }
                for(k=0;k<len;k++) 
    {
                    BYTE bt=*(char*)(rxdata+k);
         strtemp1.Format("%02X ",bt);
                    strtemp2 += strtemp1;
    }
    }
        }
    可能是我没有说得太明白,主要问题就是我接收到串口返回的数据会分为两次或者更多次的返回到时缓冲区.
    我加了语句  short n;
    n = m_ctrlComm.GetInBufferCount();   
    if(n >8 )
    来判断时,还是有问题,可以得到最终想要的数据,但会多一次空值,并且会有一个BUG,这个BUG是不定时的,
    有时会出现,但是我调试时却又不会运行到这个BUG上面去.
      

  3.   

    不支持用定时器去读写串口,最好用事件方式,最简单的用MSCOM去完成,因为串口属于一个慢速通信方式,中间有各种因素的影响,造成延迟或丢数等,用定时器去读,不仅浪费资源,而且效率很低!你回读分析方法和你在写出时的定义很相似,举例如下:
    如果你向串口写一个命令:###START RUN$$$
    ###为起始头,$$$为结束标志
    下位机返回命令如下:###OK$$$表示成功
                        ###Error$$$表示成功出错