void CRSDlg::OnBnClickedButtonOpen()
{
// TODO: 在此添加控件通知处理程序代码
CString str,str1,n;//定义字符串
GetDlgItemText(IDC_BUTTON_OPEN,str);
CWnd *h1;
h1=GetDlgItem(IDC_BUTTON_OPEN);//指向空间的caption
if(!m_mscom.get_PortOpen())
{
m_Comb2.GetLBText(m_Comb2.GetCurSel(),str1);//取得所选的字符,放在str1里面
str1=str1+','+'n'+','+'8'+','+'1';//设置数据格式
m_mscom.put_CommPort((m_Comb1.GetCurSel()+1));//选择串口
m_mscom.put_InputMode(1);//设置输入方式为二进制方式
m_mscom.put_Settings(str1);//设置波特率
//m_mscom.put_Settings(_T("9600,n,8,1"));
m_mscom.put_InputLen(1024);//设置当前接收区数据长度为1024
m_mscom.put_RThreshold(1);//缓冲区一个字符引发事件
m_mscom.put_RTSEnable(1);//设置RT允许
m_mscom.put_PortOpen(true);//打开串口
if(m_mscom.get_PortOpen())
{
str=_T("关闭串口");
UpdateData(true);
h1->SetWindowText(str);//改变按钮名称为“关闭按钮”
}
}
else
{
m_mscom.put_PortOpen(false);
if(str!=_T("打开串口"))
{
str=_T("打开串口");
UpdateData(true);
h1->SetWindowText(str);//改变按钮名称为打开串口
}
}
void CRSDlg::OnComm()
{
static unsigned int cnt = 0;
VARIANT variant_inp;
COleSafeArray safearryay_inp;
long len,k;
unsigned int data[1024]={0};
byte rxdata[1024];
CString stremp;
if(m_mscom.get_CommEvent() == 2)
{
cnt++;
variant_inp = m_mscom.get_Input();
safearryay_inp = variant_inp;
len = safearryay_inp.GetOneDimSize();
for(k=0;k<len;k++)
{
safearryay_inp.GetElement(&k,rxdata+k);
}
for (k=0;k<len;k++)
{
stremp.Format(_T("%c"),*(rxdata+k));
m_EditReceive += stremp;
CString temp=_T("\r\n");
m_EditReceive += temp;
}
}
UpdateData(FALSE);
}
以上是部分代码,疯了,总是有问题,最后这个问题,程序调试没问题,运行之后,打开串口接收数据就会提示图片显示的那样,
RS.exe 中的 0x7582845d (KernelBase.dll) 处最可能的异常: Microsoft C++ 异常: 内存位置 0x00000000 处的 [rethrow]。
RS.exe 中的 0x7582845d (KernelBase.dll) 处最可能的异常: Microsoft C++ 异常: 内存位置 0x003bd7d4 处的 COleDispatchException。
实在是不知道为啥了?求各位大神解决