VS2010 MSComm控件GetInput()出现问题

zwd1994 2015-07-29 01:55:41
串口的发送函数没有问题,但是添加事件处理后,接收数据时,可以得到缓冲区有字符,但是运行到mscomm.get_input(),就会出错,后面的代码不执行,跳到事件处理函数最前面。所以,就想问下各位大神,这是什么问题?怎么解决?下面是事件处理函数的代码
void qidongupan::OnCommMscomm1()
{
// TODO: 在此处添加消息处理程序代码
static unsigned int cnt=0;
VARIANT variant_inp;
COleSafeArray safearray_inp;
long len,k;
unsigned int data[1024]={0};
byte rxdata[1024]; //设置BYTE 数组
CString strtemp;
len=mscom.get_CommEvent();
if(len) //值为2 表示接收缓冲区内有字符
{
cnt++;
variant_inp=mscom.get_Input(); //读缓冲区消息
safearray_inp=variant_inp; ///变量转换
len=safearray_inp.GetOneDimSize(); //得到有效的数据长度
for(k=0;k<len;k++)
{
safearray_inp.GetElement(&k,rxdata+k);
}
for(k=0;k<len;k++) //将数组转换为CString 型变量
{
strtemp.Format(_T("%c"),*(rxdata+k));
recieve+=strtemp;

}
}
UpdateData(FALSE); //更新编辑框内容
}
下面是初始化串口的代码:
mscom.put_InputMode(1);//以二进制方式读写数据
mscom.put_Settings("9600,n,8,1");//波特率9600无检验位,8个数据位,1个停止位
mscom.put_InputLen(0);//设置当前接收区数据长度为0,表示全部读取
mscom.put_CommPort(3); //选择COM
mscom.put_InBufferSize(1024); //接收缓冲区
mscom.put_OutBufferSize(1024);//发送缓冲区
mscom.put_RThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
...全文
937 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
91program 2017-10-27
  • 打赏
  • 举报
回复
网上查找了一下,遇到相同问题的人挺多的,但解决问题的方法各不相同。 有硬件问题的,有驱动问题,还要接收代码问题的。如下,是接收代码原因的修改方法:

VARIANT  variant_inp;
COleSafeArray safearry_inp;
BYTE  rxdata[1000];
switch(m_mscom.GetCommEvent())
{
          case  2:            //表示接收缓冲区内有字符
    {
       variant_inp = m_mscom.GetInput();
                           safearray_inp = variant_inp;
                           len = safearray_inp.GetOneDimSize();
                           for (int i =0;i<len;i++)
                           {  safearray_inp.GetElement(&i,&rxdata[i]);  }
                            rxdata[i] = '/0';
                      }
                       break;
            default:
}

北漂的牛犊 2017-10-27
  • 打赏
  • 举报
回复
我的更新一下驱动就可以读取缓冲器数据了,但是读取的字节数有问题
如影相随 2017-04-24
  • 打赏
  • 举报
回复
遇到一模一样的问题,请问楼主怎么解决的,急急急啊!!!!
91program 2016-06-25
  • 打赏
  • 举报
回复
MSComm,LZ & LS 你们是在什么平台下使用的,WinCE? 不太可能吧!
kms720 2016-06-25
  • 打赏
  • 举报
回复
我表示也遇到了相同的问题?请问你是怎么解决的?

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧