2024年3月14日发(作者:)

Debug Assertion Failed! 我用VC++编程,运行时点击菜单选项报错。

悬赏分:200 - 解决时间:2007-10-19 22:56

我用VC++编了一个程序,该程序运行后,在点击某菜单选项时出现以下错误:

Debug Assertion Failed!

Program:

File:

Line:312

For information on how your program can cause an assertion failure,see the Visual C++

documentation on asserts.

(Press Retry to debug the application)

点击Retry后,程序关闭,系统报错误。

请问是何原因?谢谢!

提问者: wyb1949 - 二级

最佳答案

可以跟踪到 mfc提供的源代码内部,(注:如果打开了mfc源代码,设置了断点,但是跟

不进去,那就需要更新PDB文件,具体网上搜)

打开 文件(D:Program FilesMicrosoft Visual Studio .NET

2003Vc7atlmfcsrcmfc)。查看 312 行,所在函数如下:

CWnd* PASCAL CWnd::FromHandle(HWND hWnd)

{

CHandleMap* pMap = afxMapHWND(TRUE); //create map if not exist

ASSERT(pMap != NULL);

CWnd* pWnd = (CWnd*)pMap->FromHandle(hWnd);

#ifndef _AFX_NO_OCC_SUPPORT

pWnd->AttachControlSite(pMap);

#endif

ASSERT(pWnd == NULL || pWnd->m_hWnd == hWnd);

return pWnd;

}

断言就是 Assert( pWnd == NULL || pWnd->m_hwnd == hWnd );也就是读取句柄映射表错

误,有2种可能:

1你传入的窗口句柄为空,也就是生成了窗口对象但是没有使用 Create创建窗口。

2.窗口所在线程不是当前所在线程,那么使用FromHandle读取映射窗口指针或者映射临时

窗口指针必然会出错。窗口都是线程相关的噢

你点击菜单命令出错,你就有可能你的菜单命令执行的代码有 FromHandle语句,你看看,

一定就是它

200分啊,还有不明白的问我吧,一定要把分给我