注册 登录
编程论坛 VC++/MFC

同样的程序,在VC6.0和VS2005中运行结果不一样

liangquan6 发布于 2013-10-25 15:40, 482 次点击
我想用timeSetEvent编写定时程序。

在VC6.0中编写,可以成功运行

将VC6.0中的工程导入到VS2005中,编译可以通过,但运行时错误,调试发现:

static VOID CALLBACK    MilliSecondProc(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
{
    // 定时执行的函数
    iCount++;
    CString    strValue;
   
    strValue.Format("%d", iCount);
   
    CMainFrame    *pMain = (CMainFrame *)AfxGetMainWnd();
    CTimerWndView *pView = (CTimerWndView *)pMain->GetActiveView();
   
    pView->m_Value.SetWindowText(strValue);
}

该函数中
    CMainFrame    *pMain = (CMainFrame *)AfxGetMainWnd();
这句话无法获得正确的指针,这是怎么回事?

附件中timeWnd为VC6.0工程;timeWnd2005为VS2005工程,谢谢!
[local]1[/local]
4 回复
#2
liangquan62013-10-25 15:41
怎么附件添加不上?
#3
liangquan62013-10-25 16:35
自己解决了

CMainFrame    *pMain = (CMainFrame *)AfxGetMainWnd();

这句话应该改为:

CMainFrame    *pMain = (CMainFrame *)AfxGetApp()->m_pMainWnd;

单步进入函数调试会发现,原因是微软对6.0的MFC和2005的MFC提供的代码不一致造成的
#4
yuccn2013-10-25 16:57
。。
#5
sh3166301032013-11-09 20:49
1