关于使用VS2008出现Debug Assertion Failed的问题

haohao0086 2016-11-10 11:35:47
主对话框CPP为ceshi008Dlg.cpp
自己建立的串口CPP为SerialPort.cpp

当串口收到数据触发SerialPort.cpp程序中这个程序:

DWORD WINAPI CSerialPort::ReadPortThread(LPVOID lpParamter)
{
CSerialPort *m_pSerial;
m_pSerial=(CSerialPort *)lpParamter;

DWORD dwCommEvent;
DWORD dwLength;
BOOL fReadState;

char buf[1024];

while((m_pSerial->m_hComm!=INVALID_HANDLE_VALUE)&&(m_pSerial->m_bReceiving))
{
if(!WaitCommEvent((m_pSerial->m_hComm),&dwCommEvent,NULL)) //dwCommEvent=0的话有错误,等于1的话输入缓冲区中接收并放置一个字符,还有其他代表的数字
continue; //表示结束本次循环,而不终止整个循环的执行。
if((dwCommEvent&EV_RXCHAR)!=EV_RXCHAR)
//if((dwCommEvent&EV_RXFLAG)!=EV_RXFLAG)
continue;
memset(buf,0,sizeof(buf));
fReadState=ReadFile(m_pSerial->m_hComm,buf,m_pSerial->m_nBufferSize,&dwLength,NULL);
if(!fReadState)
{
break;
}
else
{
if(dwLength!=0)
{
if(m_pSerial->m_lpDataArriveProc!=NULL)
{
m_pSerial->m_lpDataArriveProc(buf,dwLength, m_pSerial->m_dwUserData);

}
}
}
}
return 0;

}

当触发m_pSerial->m_lpDataArriveProc(buf,dwLength, m_pSerial->m_dwUserData);这个函数的时候则转移到,ceshi008Dlg.cpp下的程序为:

void CallbackProc(char *data, int length, LPVOID lpParam)
{
Cceshi008Dlg *pcrs232_002Dlg = (Cceshi008Dlg*)lpParam;
int i,j=0,ifound=0;
char result[15] = {0};
char dataHeader=(char)0xAA;
char dataFooter=(char)0xAD;
for(i=0;i<length;i++){
if(data[i]==dataHeader){
j=0;
ifound=1;
}
if(ifound)
{
result[j]=data[i];
j++;
if(data[i]==dataFooter)
{
ifound=0;
//DEAL(result)
pcrs232_002Dlg->DealRecieve(result);

memset(result,0,sizeof(result));

}
}
}

}

BOOL Cceshi008Dlg::DealRecieve(char *recv)
{
dataStart=recv[0];
dataAddress=recv[1];
dataType=recv[2];
dataLength=recv[3];
dataStatus=recv[4];
dataEnd=recv[5];

if (dataStatus==0x00)
{

m_cebutton01.SetColor(CCeButtonST::BTNST_COLOR_BK_IN,RGB(255,0,0)); //指示灯红色
m_cebutton01.SetColor(CCeButtonST::BTNST_COLOR_BK_OUT,RGB(255,0,0));
m_cebutton01.SetColor(CCeButtonST::BTNST_COLOR_BK_FOCUS,RGB(255,0,0));
}
if (dataStatus==0x01)
{

m_cebutton01.SetColor(CCeButtonST::BTNST_COLOR_BK_IN,RGB(0,255,0)); //指示灯绿色
m_cebutton01.SetColor(CCeButtonST::BTNST_COLOR_BK_OUT,RGB(0,255,0));
m_cebutton01.SetColor(CCeButtonST::BTNST_COLOR_BK_FOCUS,RGB(0,255,0));

}
return true;
}

下面附加定义的类(ceshi008Dlg):

public:
CCeButtonST m_cebutton01;
afx_msg void OnBnClickedButton1();

BOOL DealRecieve(char *recv);

现在的问题是当运行到:
m_cebutton01.SetColor(CCeButtonST::BTNST_COLOR_BK_IN,RGB(255,0,0)); //指示灯红色
m_cebutton01.SetColor(CCeButtonST::BTNST_COLOR_BK_OUT,RGB(255,0,0));
m_cebutton01.SetColor(CCeButtonST::BTNST_COLOR_BK_FOCUS,RGB(255,0,0));
这些程序的时候就会出现Debug Assertion Failed,请问应该怎么解决啊 ,是不是指针传递有问题啊?



...全文
271 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2016-11-11
  • 打赏
  • 举报
回复
断言错误大都是句柄非法,比如你定义的一个窗口对象,但是窗口没有Create
haohao0086 2016-11-11
  • 打赏
  • 举报
回复
引用 2 楼 worldy 的回复:
断言错误大都是句柄非法,比如你定义的一个窗口对象,但是窗口没有Create
那这种情况应该怎么解决呢,我是用来进行串口通信的,我建立了一个线程用于“”读取串口数据“”,然后根据读取的串口数据操作主对话框中的控件进行 操作。
赵4老师 2016-11-10
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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