BOOL CWnd::DestroyWindow()中出现ASSERT(m_hWnd == hWndOrig)断言的原因及解决方法
2011-10-08 10:59
1051 查看
当我们在Dll中创建对话框时需要使用AFX_MANAGE_STATE(AfxGetStaticModuleState())语句对资源进行初始化,如果不调用这条语句,DLL中的对话框将无法打开。如果这条语句放在对话框类构造完成后,当调用DoModal()然后退出时就会出现ASSERT(m_hWnd == hWndOrig)断言,原因应该是
if (m_hWnd != NULL)
{
pMap = afxMapHWND();
ENSURE(pMap != NULL);
pWnd = (CWnd*)pMap->LookupPermanent(m_hWnd);
#ifdef _DEBUG
hWndOrig = m_hWnd;
#endif
}
这段中pMap->LookupPermanent(m_hWnd);的返回值等于NULL,导致后面的
if (pWnd != NULL)
{
// Should have been detached by OnNcDestroy
#ifdef _DEBUG
ASSERT(pMap->LookupPermanent(hWndOrig) == NULL);
#endif
}
else
{
#ifdef _DEBUG
ASSERT(m_hWnd == hWndOrig);
#endif
// Detach after DestroyWindow called just in case
Detach();
}
中的pWnd==NULL所制。应该是创建的资源不在一个内存空间中。
解决方法: 在每个使用的资源的导出函数开始调用AFX_MANAGE_STATE(AfxGetStaticModuleState())。
if (m_hWnd != NULL)
{
pMap = afxMapHWND();
ENSURE(pMap != NULL);
pWnd = (CWnd*)pMap->LookupPermanent(m_hWnd);
#ifdef _DEBUG
hWndOrig = m_hWnd;
#endif
}
这段中pMap->LookupPermanent(m_hWnd);的返回值等于NULL,导致后面的
if (pWnd != NULL)
{
// Should have been detached by OnNcDestroy
#ifdef _DEBUG
ASSERT(pMap->LookupPermanent(hWndOrig) == NULL);
#endif
}
else
{
#ifdef _DEBUG
ASSERT(m_hWnd == hWndOrig);
#endif
// Detach after DestroyWindow called just in case
Detach();
}
中的pWnd==NULL所制。应该是创建的资源不在一个内存空间中。
解决方法: 在每个使用的资源的导出函数开始调用AFX_MANAGE_STATE(AfxGetStaticModuleState())。
相关文章推荐
- BOOL CWnd::DestroyWindow()中出现ASSERT(m_hWnd == hWndOrig)断言的原因及解决方法
- 解决GetDlgItem 使用时出现ASSERT(::IsWindow(m_hWnd))断言
- linux服务器出现严重故障后的原因以及解决方法
- javascript中出现identifier starts immediately after numeric literal错误原因以及解决方法
- http 405在servlet中的出现原因和解决方法
- 出现 javax.servlet.http.HttpServlet 错误的原因及解决方法
- 线程安全问题出现的原因和解决方法
- 交换机出现err-disable的原因及解决方法
- nachos编译问题出现的原因及解决方法
- android library工程中使用switch_case语句,调用资源文件的id出现错误的原因分析及解决方法
- 安装SQL Server 2012过程中出现“启用windows功能NetFx3时出错”(错误原因、详细分析及解决方法)以及在Windows Server2012上安装.NET Framework 3
- java使用Iterator迭代出现"java.uitl.ConcurrentModificationException"错误原因及解决方法概述
- 出现 org.springframework.beans.factory.BeanCreationException 异常的原因及解决方法
- tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法
- linux服务器出现严重故障后的原因以及解决方法
- MySQL出现Waiting for table metadata lock的原因以及解决方法
- 编译时,出现ln软连接错误原因及解决方法
- tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法
- win10浏览器下载出现乱码的原因以及解决方法
- 关于Android Force Close 出现的原因 以及解决方法