VC 串口控件 数据转换

来源:互联网 发布:linux export source 编辑:程序博客网 时间:2024/06/06 02:46
 

     利用串口控件写串口,读出和写入数据的Variant变量的处理,这里包含了两种方式,自己仔细看吧!

    接收:

         VARIANT variant_inp;COleSafeArray safearray_inp;BYTE RxBuffer[10] = {0}; //设置BYTE数组LONG len,k;CString strtemp,str;if(m_Comm1.get_CommEvent()==2) //事件值为2表示接收缓冲区内有字符{variant_inp = m_Comm1.get_Input();   //读缓冲区if (variant_inp.vt == (VT_ARRAY | VT_UI1)) { BYTE *pByte = NULL; ::SafeArrayAccessData(variant_inp.parray,(void**)&pByte); memcpy(RxBuffer, pByte, 8); ::SafeArrayUnaccessData(variant_inp.parray); } //variant_inp = m_Comm1.get_Input();   //读缓冲区//safearray_inp = variant_inp;         //VARIANT型变量转换为COleSafeArray型变量//len = safearray_inp.GetOneDimSize(); //得到有效数据长度//for(k=0; k<len; k++)//safearray_inp.GetElement(&k,RxBuffer+k);//转换为BYTE型数组for (k=0; k < 8; k++){strtemp.Format(_T("%02X " ),RxBuffer[k]);str += strtemp;}CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST);pList->InsertItem(0,str);this->OnBnClickedBnSend();}

发送

/*CByteArray m_Array;BYTE byteArray[8] = {0x7e,0xff,0x00,0x01,0x15,0x15,0x65,0xab}; m_Array.RemoveAll();m_Array.SetSize(8);for(int i=0;i<8;i++)m_Array.SetAt(i,byteArray[i]);try{m_Comm1.put_Output(COleVariant(m_Array));}catch (CException* e){TCHAR str[255];e->GetErrorMessage(str,255);MessageBox(str);}*/BYTE byteArray[8] = {0x7e,0xff,0x00,0x01,0x15,0x15,0x65,0xab}; VARIANT vtOperator; SAFEARRAY* psa = NULL; BYTE* pByte = NULL; ::VariantInit(&vtOperator); psa = ::SafeArrayCreateVector(VT_UI1, 0, 8); ::SafeArrayAccessData(psa, (void**)&pByte); memcpy(pByte, byteArray, 8); ::SafeArrayUnaccessData(psa); vtOperator.vt = VT_ARRAY|VT_UI1; vtOperator.parray = psa;m_Comm1.put_Output(vtOperator);



 

原创粉丝点击