用MSCOMM控件接收数据出现的问题
用MSCOMM接收数据时,
对mscomm事件的响应代码如下:
void CSCommTestDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
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型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strRXData+=strtemp; //加入接收编辑框对应字符串
}
}
UpdateData(FALSE); //更新编辑框内容
}
//m_strRXData,是最后想要显示的CString
执行到safearray_inp=variant_inp;时老出现异常,异常如下“User Breakpoint called from code at 0x77fa018c”,variant_inp中接收到数据是对的。我和参照例子的源码比了一下,发现在VC的workspace中的FILE区中多了一个External Dependencies,其中包含了一个basetsd.h文件,估计是因为包含它的问题,想把他删掉,可是编译链接工程时都会包含这个文件。