解决问题:ASSERT in Wincore.cpp ,line 884

来源:互联网 发布:手机恢复软件免费版 编辑:程序博客网 时间:2024/05/21 06:31

Project A.dll有如下相关结构与接口:(伪VC代码)

Class CChildView : public;

Class CMainFrame {…     CChildView m_wndView; …};

CMainFrame::ShowDialingPad()

{

         CMyDialog * pDlg=new CMyDialog();

pDlg->Create(IDD_MYDIALOG,&m_wndView);//pointA

}

Global function:

Void ShowPadDialing()  {… (CMainFrame*)GetMainWindow()->ShowDialingPad ….}//pointB

 

另一个Project B.dll调用了全局函数ShowPadDialing(),从而由point B进入到pointA引发断言错误ASSERT in Wincore.cpp ,line 884

 

判断:根据网页http://www.tek-tips.com/viewthread.cfm?qid=370203 判断,此处也是多线程引发的问题。考虑用WindowsSendMessage/PostMessage机制解决。

故作如下修改:

1、自定义windows消息#define  WM_NEWMYDIALOG WM_USER+111

2、废弃CMainFrame::ShowDialingPad()的内容,该做m_wndView.PostMessage(WM_NEWMYDIALOG,WPARAM,LPARAM)//考虑多线程,不应该等待故用PostMessage

3、在CChildView:: LRESULT CChildView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)中对自定义消息NEWMYDIALOG进行处理,完成原先CMainFrame::ShowDialingPad()的相关动作。

 
原创粉丝点击