void CCommTestDlg::OnComm() //串口onComm事件
   {
    VARIANT m_input1;
    COleSafeArray m_input2;
    long length,i;
    BYTE data[1024];
    CString str;
    if(m_Comm.GetCommEvent()==2)//接收缓冲区内有字符
    { MCommFlag=1;
    m_input1=m_Comm.GetInput();//读取缓冲区内的数据
    m_input2=m_input1;//将VARIANT型变量譥aa换为COleSafeArray型变量
    length=m_input2.GetOneDimSize();//确定数据长度
    for(i=0;i<length;i++)
     m_input2.GetElement(&i,data+i);//将数据转换为BYTE型数组
    for(i=0;i<length;i++)//将数组转换为Cstring型变量
    {
     char a=* (char *)(data+i);
     str.Format("%c",a);
     m_ReceiveData+=str;
    }
    
    }
    UpdateData(FALSE);//更新编辑框内容
    
   }
   
   void CCommTestDlg::OnClear() //清除按扭
   {
    m_ReceiveData.Empty();//清除接收对话框中的数据
    m_SendData.Empty();//清除发送对话框中的数据
    UpdateData(FALSE); 
   }
   
   
   BOOL CCommTestDlg::OnInitDialog()
   {
    CDialog::OnInitDialog();
    MCommFlag=1;
    // Add "About..." menu item to system menu.
    
    // IDM_ABOUTBOX must be in the system command range.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);
    
    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
     CString strAboutMenu;
     strAboutMenu.LoadString(IDS_ABOUTBOX);
     if (!strAboutMenu.IsEmpty())
     {
      pSysMenu->AppendMenu(MF_SEPARATOR);
      pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
     }
    }
    
    // Set the icon for this dialog. The framework does this automatically
    // when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE);   // Set big icon
    SetIcon(m_hIcon, FALSE);  // Set small icon
    
    if(m_Comm.GetPortOpen()) 
    { 
     m_Comm.SetPortOpen(FALSE); //设置串口配置信息前先要关闭串口 
    } 
    // unsigned int n=m_Comm.GetCommPort();
    // CString com[2]={"1","2"};
    
    //if (n!=NULL){
    //  AfxMessageBox(com[n-1]);}
    m_Comm.SetCommPort(1);  //Com1串行口 
    m_Comm.SetSettings("9600,n,8,1");//设置波特率为9600bps,无奇偶校验位,数据位8位,停止位1位 
    m_Comm.SetInputMode(1);  //设置数据通讯格式为二进制数组格式 
    m_Comm.SetRThreshold(1);  //设置为每次接到一个字节数据就触发OnComm事件 
    if(!m_Comm.GetPortOpen()) 
    { 
     m_Comm.SetPortOpen(TRUE); 
    } 
    m_Comm.GetInput();  //清除串口输入缓冲区中残留数据 
    return TRUE; // return TRUE unless you set the focus to a control
   }
   
   void CCommTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
   {
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
     CAboutDlg dlgAbout;
     dlgAbout.DoModal();
    }
    else
    {
     CDialog::OnSysCommand(nID, lParam);
    }
   }
   void CCommTestDlg::OnSend() //发送按扭的
   {
    if( !m_Comm.GetPortOpen() )
     m_Comm.SetPortOpen(TRUE);//打开串口
    UpdateData(TRUE);
    /****************************************************************************/
    //m_Comm.SetOutput(COleVariant(m_SendData));//原来的可以的
    
    /************************************************************************/ 
    //
    //下面测试用的
    /***********************************************/
    int len=m_SendData.GetLength();
    strcpy(m_pHexTemp,(LPTSTR)(LPCTSTR)m_SendData);//在发送区显示
    
    
    char temp[10];
    memset(temp,0,10);//为8个时有乱码
    int i=0;
    while(i<len)//数据每次送8个字节
    {
     if(MCommFlag==1)
     {
      MCommFlag=0;
      for(int j=0;j<8;j++){
       if(m_pHexTemp[i]!=NULL)
       {temp[j]=m_pHexTemp[i];
       i++;
       }
       else temp[j]=NULL;
      }
      UpdateData();
      m_Comm.SetOutput(COleVariant(temp));//发送数据
      /******************************/
      AfxMessageBox(temp);//如果去掉,超过len>8时是死循环
       //调试时无意中发现的
      /********************************/
      //unsigned long time=2000;//加延时也不行
      // while(--time);
      /****************************************/ 
     }
    }
   }
   /**********************************************************************/
   
   
   
  另外定义了一个MCommFlag作为标志,和一个数组 char m_pHexTemp[80]
  我的调试通过,不过我想把AfxMessageBox(temp)去掉也行该怎么办呀(用其他方法实现也可以)
  在一个机子上把2,3脚接在一起即可。可以用圆珠笔的弹簧套住:)
   
其中有
  两个EDIT 定义了CString 
   m_ReceiveData //显示收到数据
   m_SendData //显示发送的数据
   
  两个按钮
  一个 发送 send 
  一个 清除 clear
   
  一个Comm控件
  定义了 m_Comm 
     程序全写出来了,请各位指教
  有什么不对的都请指出来:)
  谢谢了    我要把80个字节的数据  
 
在一个循环里  
 
分8次由串口送出  
 
如果接受接收(定义了一个标志位)  
   就发送下面的8数据  
一直到数据发送完毕  
 
 我用的是控件
可是我当发送完8个数据,发现并不触发OnComm事件  
所以就成了死循环。  
我该怎么办呀?