VARIANT m_Input1; 
COleSafeArray m_Input2; ......m_Input2 = m_Input1;   //将VARIANT型变量转换为COleSafeArray型变量 ,在调试时出错!!......

解决方案 »

  1.   

    我用VC6和VS2008都试了,编译可以通过,但调试运行时出错!
    我是做硬件的,软件水平是入门级的,请各位大侠相助!!!
      

  2.   

    m_Input1读缓冲了吗? 缓冲有数据吗? 你把完整的读代码发出来.
      

  3.   

    通用的串口读取数据程序:
    // 控件事件的响应
    BOOL CGolfView::OnComm()
    {
     VARIANT variant_inp;
     COleSafeArray safearray_inp;
     LONG len,k;
     BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
     CString strtemp;
     switch(m_MSComm.GetCommEvent())
     {
      case 1: // comEvSend发送数据
       break;
      case 2: // comEvReceive读取数据
       // MessageBox(_T("读取数据事件"), _T("TRACE"), MB_OK);
       variant_inp=m_MSComm.GetInput(); //读缓冲区
       safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
       len=safearray_inp.GetOneDimSize(); //得到有效数据长度
       // 接受数据
       for(k=0; k<len; k++)
       {
        safearray_inp.GetElement(&k,rxdata+k); //转换为BYTE型数组
        BYTE bt=*(char*)(rxdata+k); //字符型
        strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
        recd+=strtemp;
       }   // UpdateData(TRUE);
     
       break;
      default: // 传输事件出错
       m_MSComm.SetOutBufferCount(0);
       break;
      }
     UpdateData(FALSE); //更新图象内容
     return TRUE;
    }
      

  4.   

    代码和socoola君贴出的一样  在执行此句时出错:
    ......
    safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
    ......目前已解决,绕道而行:         int k;
    CString mInput; if(myComm.GetCommEvent()==2)
    {
    k = myComm.GetInBufferCount(); //接收到的字符数目
    if(k>0) {
            mInput = myComm.GetInput().bstrVal; 
                            RecDisp += mInput;
    }
            this->GetDlgItem(IDC_EDIT2)->SetWindowText( RecDisp );
    }
    设了一个全局变量 CString RecDisp;
    结果是出来了,但不知这样做和以上socoola君给出的程序相比是否劣一些