VC应用程序接收串口数据问题
菜鸟提问一个简单问题,还请大家见谅:
VC接收串口数据是否用 m_ctrlComm.GetInput( );这条指令 (串口控件已加,串口也已打开)
因为发送数据直接用:m_ctrlComm.SetOutput(COleVariant(m_strTXData));是可行的
我直接 m_strRXData=m_ctrlComm.GetInput( );会报错
仿照发送数据用 COleVariant(m_strRXData)=m_ctrlComm.GetInput( );就不会报错,但下面不知道怎么用
比如串口发来0x01
我这样写 if(m_strRXData==0x01)
{
;
}
也不行
请帮忙解决一下,谢谢!!!
[解决办法]
你用的是MSCOMM控件吧?
在ONCOMM事件中进行接受,由于接受到的数据是VARIANT型的,所以需要COleSafeArray进行个中间转换,参考代码如下:
void CWyf1Dlg::OnOnCommMscomm1() {// TODO: Add your control notification handler code here VARIANT variant_inp; static float a,b,c; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed. CString strtemp; if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符 { ////////以下你可以根据自己的通信协议加入处理代码 variant_inp=m_ctrlComm.GetInput(); //读缓冲区 safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量 len=safearray_inp.GetOneDimSize(); //得到有效数据长度 for(k=0;k<len;k++) safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组 for(k=0;k<len;k++) //将数组转换为Cstring型变量 { strtemp.Format("%X",rxdata[k]); //将字符送入临时变量strtemp存放 } }}
[解决办法]
类似这样使用
VARIANT var =m_ctrlComm.GetInput( );
if(var.vt == VT_BSTR)
{
m_strRXData = var.bstrVal;
if(m_strRXData.GetBuffer(0)[0] == 0x01)
{
}
m_strRXData.ReleaseBuffer();
}