请教各位高手,能不能给指出是哪的问题啊?自发自收的话就不会关闭,两台电脑连得时候,接收一定数据后就会自动关闭,应该怎么改啊?

解决方案 »

  1.   


    void CALLBACK CMy110Dlg::OnCommRecv(CWnd* pWnd, char *buf, int buflen)
    {
       unsigned char addr[7];
    unsigned char bianhao[7];
    //CString str="";
    CString tmp="";
    CString str="";
    CString data="";
    //char *p;
    unsigned char state;   //装载开关的状态,与电压和电流值不放在一起
    char buffer[8];
    float *q;
    int k=0;
    int add;
    int i;
    int pro;
    unsigned char number[132];
    //long number;
    float value[6];

        int S;
    int E;
    int e=1;
    float M;
    long temp[7];
    long temp2;
    float temp1[7]; char hadd[6];
    CMy110Dlg * pDlg = (CMy110Dlg*)pWnd;
        int j=0;
    pDlg->m_strRecDisp="";/****************************************************************************/
    /*                                                                          */
    /*                                                                          */
    /*                                                                          */
    /****************************************************************************/
         for( i=0;i<buflen;i++,buf++)
    {
             number[i]=*buf;
    }
        for(i=0;i<39;i++)
    {
    if(number[i]>0x80)          //地址的起始位为1,数据的起始位为0
    {
                addr[j]=number[i]&0x7F;  //代表地址,表示后面的数据是哪个项目的
                bianhao[j]=i;  //代表受到的数据中是地址的数据组的编号,从第零个接收数据开始计算的
    j=j+1;       //代表一共有j个是表示地址的数据
    }
    }
    for(i=0;i<j;i++)
    {   
    if(addr[i]!=7)
    {
    temp[i]=(((int)(number[bianhao[i]+1]<<1))<<8)|(((int)number[bianhao[i]+2])<<2);
    temp[i]=(temp[i]<<8)|(((int)number[bianhao[i]+3])<<3);
    temp[i]=(temp[i]<<8)|(((int)number[bianhao[i]+4])<<4);
    temp[i]=temp[i]|number[bianhao[i]+5];                             //转换成32位long型数据,都存在temp数组中,最后的那组数据只有四个有效位,放在最低四位
    }
    else
             state=((number[bianhao[i]+1]<<1)|number[bianhao[i]+2]);//开关状态是分两组传输的,其中第二组只有一个有效值,将其放在最低位
    }
        //_itoa(state,buffer,10); //char *p=new char[8];
            //unsigned char a=buffer[0];
    unsigned char b;
    //char *p;
    // p=&a;
         //AfxMessageBox(_T("到了!"));
    // buf=buf-2;
    //pDlg->m_strRecDispb.empty();
       for(i=0;i<8;i++)
    {
    //tmp.Format(_T("%c"), *p);

    b=state&0x80;
    if(b)
    {
        pDlg->m_strRecDisp+= "1";
    }
    else
            pDlg->m_strRecDisp+= "0";
    state=state<<1;
    //tmp.Empty();
    // AfxMessageBox(_T("到了!"));
    }

    pDlg->SetDlgItemText(IDC_REC_DISP,pDlg->m_strRecDisp); // 显示在窗口上

    for(i=0;i<6;i++)
    {
             S=(temp[i]&0x80000000)>>31;
         E=((temp[i]&0x7F800000)>>23)-150;
         M=(temp[i]&0x7fffff)|0x800000;  //float型数据的尾数部分的二进制值,加了省略的1;
         //temp2=1+temp2*0.00000011920928955078125;
     if(E>=0)
      {
          for(int i=0;i<E;i++)
      {
      M=M*2;
      }
      }
      else
          {
      for(int i=E;i<0;i++)
      {
      M=M/2;
      }
      }
      
         
      if(S==0)
      {
              value[i]=M*e;
      }
      else
      {
      value[i]=-M*e;
      }
    }
       
       q=value;
       for(i=0;i<6;i++,q++)
       {
       str.Format(_T("%f"),*q);
       pDlg->SetDlgItemText(IDC_EDIT1+addr[i]-1,str);
       str.Empty();
       }
    pDlg->GetDlgItemText(IDC_REC_DISP,data); unsigned char *recvbuf = new unsigned char[8];
    /* for( i =0 ; i < 8;i++)
    {
    recvbuf[i] = (char)data.GetAt(i);
        if(recvbuf[i] == '1')
    {
    pDlg->CheckDlgButton(IDC_CHECK1+i, BST_CHECKED);  
    }
    else
    {
    pDlg->CheckDlgButton(IDC_CHECK1+i, BST_UNCHECKED);
    }
    }*/ for( i =0 ; i < 7;i++)
    {
    recvbuf[i] = (char)data.GetAt(i);
        if(recvbuf[i] == '1')
    {
    pDlg->CheckDlgButton(IDC_CHECK1+i, BST_CHECKED);  
    }
    else
    {
    pDlg->CheckDlgButton(IDC_CHECK1+i, BST_UNCHECKED);
    }
    } recvbuf[7]=(char)data.GetAt(7);
    if(recvbuf[i] == '1')
    {
    pDlg->CheckDlgButton(IDC_CHECK8, BST_CHECKED);  
    }
    else
    {
    pDlg->CheckDlgButton(IDC_CHECK8, BST_UNCHECKED);
    }
        

       delete[] recvbuf;
    data.Empty();
      }
      

  2.   

    调试的时候有错误,但不知道怎么解决。请高手指教。
    名称 this
    值 CXX0017:Error: symbol "this" not found