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

本文介绍了一个DLL项目中出现的断言错误,并分析了其原因可能是由于多线程导致。提出了通过使用Windows的消息传递机制来解决该问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()的相关动作。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值