读书人

VC应用程序接收串口数据有关问题

发布时间: 2012-05-05 17:21:10 作者: rapoo

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进行个中间转换,参考代码如下:

C/C++ code
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();

}

读书人网 >VC/MFC

热点推荐