VC 串口控件 数据转换

 

     利用串口控件写串口,读出和写入数据的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);



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值