首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2012-05-05 
VC应用程序接收串口数据问题菜鸟提问一个简单问题,还请大家见谅:VC接收串口数据是否用m_ctrlComm.GetInput

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();

}

热点排行