类的回调函数中生成新的类对象,并调用其函数,debug时出现assertion错误,release没有错误是什么原因,如何解决。
我现在想在回调函数中直接使用该对象,但回调函数只能是全局或静态的,不能使用非静态的变量和函数,有办法吗。
请赐教。
void COSDDlg::StartOneMilliSecondTimer()
{
if((TimerID_1ms =timeSetEvent(wTimerRes_1ms,wAccuracy,
(LPTIMECALLBACK) OneMilliSecondProc, // 回调函数;
(DWORD)this,// 用户传送到回调函数的数据;
TIME_PERIODIC)) == 0)//周期调用定时处理函数;
{
AfxMessageBox(_T("不能进行定时!"), MB_OK | MB_ICONASTERISK);
}
}void PASCAL OneMilliSecondProc(UINT wTimerID, UINT msg,DWORD dwUser,
DWORD dwl,DWORD dw2)
{
COSDDlg *app=(COSDDlg*)dwUser;
app->test();
} void COSDDlg::test()
{
TextOut(MemDC,-k,0,osd_words,osd_words.GetLength());//CDC MemDC
}
我现在想在回调函数中直接使用该对象,但回调函数只能是全局或静态的,不能使用非静态的变量和函数,有办法吗。
请赐教。
void COSDDlg::StartOneMilliSecondTimer()
{
if((TimerID_1ms =timeSetEvent(wTimerRes_1ms,wAccuracy,
(LPTIMECALLBACK) OneMilliSecondProc, // 回调函数;
(DWORD)this,// 用户传送到回调函数的数据;
TIME_PERIODIC)) == 0)//周期调用定时处理函数;
{
AfxMessageBox(_T("不能进行定时!"), MB_OK | MB_ICONASTERISK);
}
}void PASCAL OneMilliSecondProc(UINT wTimerID, UINT msg,DWORD dwUser,
DWORD dwl,DWORD dw2)
{
COSDDlg *app=(COSDDlg*)dwUser;
app->test();
} void COSDDlg::test()
{
TextOut(MemDC,-k,0,osd_words,osd_words.GetLength());//CDC MemDC
}
app->test();
++++++++++++++++++++++++++++++++
这样出问题了?
app->test(); 这样试试
void PASCAL COSDDlg::OneMilliSecondProc(UINT wTimerID, UINT msg,DWORD dwUser, //把这个静态函数声明在类中的静态函数,而且是public的
DWORD dwl,DWORD dw2)
{
COSDDlg *app=(COSDDlg*)dwUser;
app->test();
}
void PASCAL COSDDlg::OneMilliSecondProc(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2) 这样就好了
void PASCAL OneMilliSecondProc(UINT wTimerID, UINT msg,DWORD dwUser,
DWORD dwl,DWORD dw2)
{
COSDDlg *app=(COSDDlg*)dwUser;
app->test();
}
试问dwUser是如何传递进去的?这个强制转换根本得不到一个有效的COSDDlg类对象指针,执行时当然会出错了。