运行错误:Assertion Failed! wcebar.cpp, Line 646
最近写个PPC的MFC程序,在Debug模式下,编译没有问题,但是运行的时候就会出现题目中的错误。但是,在Release模式下,却没有问题。
用google搜索下,找到别人也有类似的错误,也提供了方法:看MFC的源代码--wcebar.cpp文件:
645 HMENU hMenu = ::LoadMenu(hInst, lpszMenuName);
646 ASSERT((hMenu != NULL) && ::WCE_FCTN(IsMenu)(hMenu));
语句是在CMenu* CCeCommandBar::InsertMenuBar(LPCTSTR lpszMenuName, int nButton /*= CMDBAR_END*/)函数中。
看了后,恍然大悟,难怪在Release模式下,没有出错——因为宏ASSERT只在Debug模式下起作用。
于是问题可以定位于自己程序中的lpszMenuName是空的问题了。
回到自己的程序中,找到如下的语句:
if(!m_wndCommandBar.Create(this) ||
// !m_wndCommandBar.InsertMenuBar(IDR_MAINFRAME) ||
!m_wndCommandBar.AddAdornments() ||
!m_wndCommandBar.LoadToolBar(IDR_MAINFRAME) ||
!m_wndCommandBar.SendMessage(TB_SETTOOLTIPS, (WPARAM)(3), (LPARAM)(m_ToolTipsTable)))
{
TRACE0("Failed to create CommandBar\n");
return -1; // fail to create
}
语句在函数int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中,
原来,是MFC向导自动生成的程序,但是我在后面的开发过程中,将菜单项删除了,但是没有将上面的 !m_wndCommandBar.InsertMenuBar(IDR_MAINFRAME) 语句注释掉,所以才会出现题目中的错误。
注释该语句掉,就OK了。