用VC6.0的MFC做的基于对话框MSComm控件的串口通讯软件,用网络虚拟串口连下位机,通讯一段时间后出现蓝屏
蓝屏代码一直为0x00000044,开始以为接收出问题,屏蔽掉接收后依然蓝屏,MSComm控件初始化如下:if(m_comm.GetPortOpen())//如果串口是打...
蓝屏代码一直为0x00000044,开始以为接收出问题,屏蔽掉接收后依然蓝屏,MSComm控件初始化如下:
if(m_comm.GetPortOpen()) //如果串口是打开的,则行关闭串口
{
m_comm.SetPortOpen(FALSE);
}
m_comm.SetCommPort(2); //选择COM2
m_comm.SetInBufferSize(1024); //接收缓冲区
m_comm.SetOutBufferSize(1024);//发送缓冲区
m_comm.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取
m_comm.SetInputMode(1);//以二进制方式读写数据
m_comm.SetRThreshold(37);//接收缓冲区有37个及37个以上字符时,将引发接收数据的OnComm事件
m_comm.SetSettings("9600,n,8,1");//波特率9600无检验位,8个数据位,1个停止位
if(!m_comm.GetPortOpen())//如果串口没有打开则打开
m_comm.SetPortOpen(TRUE);//打开串口
else
m_comm.SetOutBufferCount(0);
发送代码如下:
UpdateData(TRUE);
UpdateData(FALSE);
BYTE Txbuf[8];//发送buf
int i=0;
Pack(m_myID[BranchNum-1], MOD_REQ, MOD_REG_READ,0x0090,Txbuf);
CByteArray OutBuf;
OutBuf.RemoveAll();
OutBuf.SetSize(8); //设置大小
for(i = 0; i < 8; i++)
{
OutBuf.SetAt(i, Txbuf[i]); // BYTE转CByteArray
// OutBuf[i] = Txbuf[i];// BYTE转CByteArray
}
m_comm.SetOutput(COleVariant(OutBuf));//发送命令
m_edit_show_connect.Format(_T("第%d发送正常"),m_myID[BranchNum-1]);
GetDlgItem( IDC_EDIT_SHOW_CONNECT )->SetWindowText(m_edit_show_connect);
OutBuf.FreeExtra();
求大家帮帮我,都快急死了~~ 展开
if(m_comm.GetPortOpen()) //如果串口是打开的,则行关闭串口
{
m_comm.SetPortOpen(FALSE);
}
m_comm.SetCommPort(2); //选择COM2
m_comm.SetInBufferSize(1024); //接收缓冲区
m_comm.SetOutBufferSize(1024);//发送缓冲区
m_comm.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取
m_comm.SetInputMode(1);//以二进制方式读写数据
m_comm.SetRThreshold(37);//接收缓冲区有37个及37个以上字符时,将引发接收数据的OnComm事件
m_comm.SetSettings("9600,n,8,1");//波特率9600无检验位,8个数据位,1个停止位
if(!m_comm.GetPortOpen())//如果串口没有打开则打开
m_comm.SetPortOpen(TRUE);//打开串口
else
m_comm.SetOutBufferCount(0);
发送代码如下:
UpdateData(TRUE);
UpdateData(FALSE);
BYTE Txbuf[8];//发送buf
int i=0;
Pack(m_myID[BranchNum-1], MOD_REQ, MOD_REG_READ,0x0090,Txbuf);
CByteArray OutBuf;
OutBuf.RemoveAll();
OutBuf.SetSize(8); //设置大小
for(i = 0; i < 8; i++)
{
OutBuf.SetAt(i, Txbuf[i]); // BYTE转CByteArray
// OutBuf[i] = Txbuf[i];// BYTE转CByteArray
}
m_comm.SetOutput(COleVariant(OutBuf));//发送命令
m_edit_show_connect.Format(_T("第%d发送正常"),m_myID[BranchNum-1]);
GetDlgItem( IDC_EDIT_SHOW_CONNECT )->SetWindowText(m_edit_show_connect);
OutBuf.FreeExtra();
求大家帮帮我,都快急死了~~ 展开
展开全部
蓝屏代码0x00000044 超过区域计算机网络配接卡的名称限制。
如果要知晓具体引发原因,你可以查查蓝屏分析工具,我以前用过,叫什么WinDbg的。
除此之外,要确认是不是你程序的设置不对,可以换一台电脑试试,是否还是蓝屏。
如果要知晓具体引发原因,你可以查查蓝屏分析工具,我以前用过,叫什么WinDbg的。
除此之外,要确认是不是你程序的设置不对,可以换一台电脑试试,是否还是蓝屏。
追问
因为虚拟串口使用的别人的一个软件,是GPRS的接收端的软件需要在电脑上先虚拟一个串口,然后在将数据从网络端传到虚拟串口中,我的软件就是从这个虚拟串口中读取数据~
换过两台电脑,同样是蓝屏,而且都是0x00000044,假如不用我的程序,当然别人虚拟串口的软件也就不会为我收发数据了,所以永远不会蓝屏,当别人的软件运行,而我的软件只管发送,连续发送三五个小时后,也就会出现蓝屏~~
2012-12-24
展开全部
蓝屏估计是驱动有问题,最大的可能是网络虚拟串口的问题.
应用程序的代码是不会导致蓝屏的,顶多程序崩溃.
内核代码执行错误才会蓝屏.
应用程序的代码是不会导致蓝屏的,顶多程序崩溃.
内核代码执行错误才会蓝屏.
追问
虚拟串口使用的别人的一个软件,GPRS的接收端的软件需要在电脑上先虚拟一个串口,然后在将数据从网络端传到虚拟串口中,我的软件就是从这个虚拟串口中读取数据~
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有用过这个控件,你的判断语句是不是有问题,若串口是打开的 就直接就直接设置参数, 若是关闭的 再打开串口,在去设置一些串口的参数,试一下吧!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询