关于使用VS2008出现Debug Assertion Failed的问题
主对话框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,请问应该怎么解决啊 ,是不是指针传递有问题啊?