BOOL CWnd::DestroyWindow()中出现ASSERT(m_hWnd == hWndOrig)断言的原因及解决方法
2013-09-22 20:31
651 查看
转自:http://blog.csdn.net/ningbinzhang/article/details/6851766
当我们在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())。
当我们在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())。
相关文章推荐
- BOOL CWnd::DestroyWindow()中出现ASSERT(m_hWnd == hWndOrig)断言的原因及解决方法
- 解决GetDlgItem 使用时出现ASSERT(::IsWindow(m_hWnd))断言
- jsp出现getOutputStream() has already been called for this response异常的原因和解决方法
- c++ std::sort函数调用经常出现的invalidate operator<错误原因以及解决方法
- 引用原因.NET下编译C++代码时出现fatal error C1083: 无法打开包含文件:“iostream.h”: No such file or directory错误的解决方法.
- 使用cgminer挖矿出现HW error可能的原因及解决方法
- ling to sql 中出现错误“已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭”原因及解决方法
- ORA-14452的出现原因解析及解决方法
- jsp出现getOutputStream() has already been called for this response异常的原因和解决方法
- php ip2long 出现负数原因及解决方法
- Java中long类型直接赋值出现The literal xxxxxxxxxx of type int is out of range 问题的原因和解决方法
- 关于Android Force Close 出现的原因 以及解决方法
- Android Force Close 出现的异常原因分析及解决方法
- 读取文本出现 锘 * 系列乱码错误(UTF-8 BOM问题)的原因及解决方法
- QT出现“collect2 ld returned 1 exit status”问题原因及解决方法
- ConcurrentModificationException异常出现原因以及解决方法
- 本机运行x程序出现:Can't open display 原因及其解决方法
- 转载 本机运行x程序出现:Can't open display 原因及其解决方法
- wordpress更改“固定链接”模式后,页面出现404原因及解决方法
- SVN冲突出现原因及解决方法浅谈