日期:2014-05-17  浏览次数:20874 次

WIN7 上位机串口编程问题
上位机串口接收程序和所有网上贴的基本无差别。网上大多数帖子已经浏览遍了,但从未出现我下面这个问题,实在找不到原因了, 现求助高手。
系统是WIN7, 编译环境是VS2008, 之前是用VS2012,发现了如下问题,怀疑是版本不兼容,直接换VS2008 ,还是以下的问题。
先发段串口接收代码(和大部分网上一致):

void CscommDlg::OnComm()
{
// TODO: 在此处添加消息处理程序代码
VARIANT variant_inp; 
COleSafeArray safearray_inp; 
LONG len,k; 
BYTE rxdata[5]; 
CString strtemp;
if(m_scomm1.get_CommEvent()==2)
{
//m_scomm1.put_RThreshold(0);
variant_inp=m_scomm1.get_Input();
safearray_inp=variant_inp;
len=safearray_inp.GetOneDimSize();
for(k=0;k<len;k++)
{
BYTE bt=*(char*)(rxdata+k);
   strtemp.Format(_T("%c"),bt);
m_recv+=strtemp;
}
//m_scomm1.put_RThreshold(5);
}
UpdateData(FALSE);
};
编译是没有问题的, 然后我用下位机每隔一秒发送一个字节数据, 我用串口调试助手收没有任何问题,而用这个代码  接收没显示,然后单步运行, 发现一个情况:
variant_inp=m_scomm1.get_Input(); 执行到这里 就不执行下一步语句了,直接 跳出去, 下次接收 ,执行到这 又不执行了, 跟踪这个代码的定义到get_Input函数:
VARIANT get_Input()
{
VARIANT result;
InvokeHelper(0x1a, DISPATCH_PROPERTYGET, VT_VARIANT, (void*)&result, NULL);
return result;
}
在InvokeHelper(0x1a, DISPATCH_PROPERTYGET, VT_VARIANT, (void*)&result, NULL);执行到这就不执行return result; 实在是不知道什么问题,我看网上贴的所有相关代码都没问题,
然后输出框提示有个异常:
     scomm.exe 中的 0x757bc6e3 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0023ec34 处的 COleDispatchException。
scomm.exe 中的 0x757bc6e3 处最可能的异常: Microsoft C++ 异常: 内存位置 0x00000000 处的 [rethrow]。
每隔一秒 弹一个 这个, 正好符合我下位机发送数据的频率, 请解高手 这个到底怎么解决啊,弄好久了。
------解决方案--------------------
没遇到过这种情况,建议您换个版块。