解决方案 »

  1.   

    我还通过m_ctrlComm.put_InBufferSize(2);//设置输入缓冲区大小,进行控制缓存区字符的数量,结果还是没有用。
      

  2.   

    如果是使用api则使用PurgeComm函数,如果是mscomm控件应该是设置InBufferLen属性=0
      

  3.   


    刚刚我看错了,我设置的是inputLen.我刚刚试你这个指令,显示不是其成员函数啊。
      

  4.   

    CSComm是什么控件?那你得查看其文档,看使用什么函数清空缓存区
      

  5.   

    囧,是mscomm控件
    下面是我输出函数代码,麻烦您看看
    CString output()
    {
    VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;
    BYTE rxdata[2048];//用于存放接收到的数据,BYTE格式(即CHAR格式)  
    CString strtemp;//可将转换成字符串格式后的串口数据存入此变量 
     //读缓冲区数据并进行转换 
    if(m_ctrlComm.get_CommEvent()==2)//事件值为2表示接收缓冲区内有字符 
    {
    variant_inp=m_ctrlComm.get_Input();//读缓冲区 
    safearray_inp=variant_inp;//将VARIANT型变量转换为ColeSafeArray型变量     
    len=safearray_inp.GetOneDimSize();//得到有效数据长度  for(k=0;k<len;k++)
    {
    safearray_inp.GetElement(&k,rxdata+k); 
    m_ctrlComm.put_InputLen(0);
    }
    for(k=0;k<len;k++)//将数组转换为Cstring型变量    
    {
    BYTE bt=*(char*)(rxdata+k); //字符型 
    strtemp.Format(_T("%c"),bt);//将字符送入临时变量strtemp存放     
    m_l+=strtemp; //加入接收编辑框对应字符串   }

    }

    //safearray_inp.Clear ();
    //memset(rxdata,NULL,2048);
    //m_ctrlComm.put_InBufferCount(0);
    //m_ctrlComm.get_Input();  这是我尝试过的清除方法。但是都不管用

    return 0;
    }
      

  6.   

    m_ctrlComm.put_InputLen(0);这个才是清除接收缓存区