MSCcomm控件出现ASSERT错误

来源:互联网 发布:知乎页面改版 编辑:程序博客网 时间:2024/06/05 19:02
nchygy的专栏

[原]串口读事件,函数中的奇怪问题。safearray A=variant B的赋值错误.期待解决中...

2011-11-13阅读484 评论2

环境VC2008
功能:串口Mscomm通讯,收发字符
1. 初始化内容:
  if (!Mscomm)
{
MessageBoxA(NULL,("串口输入错误,请检查串口通讯实例"),NULL,NULL);
return true;
}
Mscomm->put_CommPort(PortNum);//com1
if(Mscomm->get_PortOpen())
{
MessageBoxA(NULL,("串口已打开,请先关闭"),NULL,NULL);
return false;
}

Mscomm->put_InBufferSize(1024);
Mscomm->put_OutBufferSize(512);
if(!Mscomm->get_PortOpen())
{
Mscomm->put_PortOpen(TRUE);
MessageBox(NULL,("串口打开成功"),"成功",NULL);
}
else
MessageBox(NULL,("无法打开串口端口"),NULL,NULL);
// m_mscomm1.SetSettings(chSet);//"4800,n,8,1"
Mscomm->put_Settings("9600,e,7,2");
Mscomm->put_InputMode(Mscomm->comInputModeText);//字符检取数据
Mscomm->put_RThreshold(1);//触发事件字节数
Mscomm->put_InputLen(0);//全部读完
2. oncomm事件响应代码出错:
  int CommEvent=Mscomm->get_CommEvent();
if(CommEvent == 2)
{
COleVariant varInput;//VARIANT  
COleSafeArray sfarrInput;
static long len,k; 
static CString strTemp;
len = Mscomm->get_InBufferCount();
varInput = Mscomm->get_Input();
//sfarrInput.Attach(varInput);//试后同样出错
sfarrInput = varInput;//错误出现,定位于COleSafeArray中重载的"="
//后续省略
  }
3. 错误内容:
  Assert出错,定位到MFC封装的函数中:
  COleSafeArray&COleSafeArray::operator=(const VARIANT & varSrc)  
  {  
  ASSERT (varSrc.vt & VT_ARRAY); //varSrc.vt =8,本句出错
  AfxCheckError(::VariantCopy(this,(LPVARIANT)&varSrc));  
  return *this;  
  }  
4. 本程序,原来若初始化InputMode为二进制数据时,成功运行,没有错误。但是初始化为文本时出错。
原因不明。求教。另外因本程序传递的是字符。怎么办才对?
上一篇
请先登录后,再发表评论!
查看评论
  • 2楼Huaerge2014-03-04 13:14

    我做的是从文件里面读出文本,然后将文本的数据转换成16进制进行发送,当然文本中的字符也是数字和字母,不存在汉字

  • 1楼Huaerge2012-12-25 09:18

    这个问题解决了吗?

更多评论(2)
回顶部
0 0
原创粉丝点击