Visual c++ 2005开发的Visual c++项目-在Visual c++ 2010中,菜单打开时调试断言失败
Visual C++ project developed in Visual C++ 2005 - In Visual C++ 2010, debug assertion fails on menu open, but release mode works, how to fix?
我刚开始做一个别人用Visual c++ 2005使用MFC开发的项目。为此,我安装了Visual c++ 2010 -我没有使用任何版本的经验(或Visual studio,就此而言)。
应用程序有一个使用CMenu
类实现的菜单栏,并从资源初始化(即使用菜单编辑器创建)。
如果我在调试模式下运行应用程序,那么只要我打开菜单栏中的任何菜单,下面的调试断言就会失败:
文件名:afxwin1.inl
断言(带有适当的上下文):
_AFXWIN_INLINE HMENU CMenu::GetSafeHmenu() const
{ ASSERT(this == NULL || m_hMenu == NULL || ::IsMenu(m_hMenu));
return this == NULL ? NULL : m_hMenu; }
根据调试器,this
被设置为指向我的菜单的指针,this->m_hMenu
也被设置为指针-然而,调试器似乎对类型感到困惑,值是0xdeadbeef {unused=??? }
(当然是0xdeadbeef
的更无聊的值)。
似乎有什么东西坏了,很可能在项目代码中-我知道这一点。但是,如果我创建了一个发布版本,它运行时没有错误,并且菜单正确显示。此外,我使用Visual c++ 2010中的菜单编辑器编辑了菜单,并保存了它-没有变化。因此,我排除了由于资源格式错误而导致的菜单兼容性问题。
我在ThinkPad T61p上运行Windows XP SP3。
创建菜单的代码是
CMenu menu;
menu.LoadMenu(RESOURCE_NAME);
SetMenu(&menu);
并且在CFrameWnd
的子类上下文中运行。
我搜索了很多谷歌,我很确定以前没有人遇到过这个问题;此外,我对所有c++, MFC和Visual Studio都是新手。我将非常感激你的帮助;如果我能提供更多的问题元数据,请告诉我,我会提供的。提前感谢!
根据MSDN (http://msdn.microsoft.com/en-us/library/177ay1x0.aspx)
CMenu::LoadMenu()需要传入一个参数,该参数在示例代码中缺失。请检查并确保您传递的是有效的菜单资源id。
编辑:你的菜单对象是在堆栈上构造的,一旦它超出作用域就会被销毁。你从哪里调用CWnd::SetMenu ?你需要确保对象的生命周期可以持续到下一个CWnd::SetMenu,否则你将持有/引用一个悬浮指针。
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何在MS Visual Studio 2019中运行QT UI
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Visual Studio Code - C++ Debugger 無法啟動
- Visual C++ constexpr Hints
- 为什么它不适用于Visual 2019的原因
- Visual Studio 2019:插入多个C++风格的单行注释
- Visual Studio Code "undefined reference to `WinMain@16'"
- visual在c++中将十进制数转换为二进制数
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- Visual Studio中的函数声明和函数定义问题
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- Visual C++(VS2017)中用户定义的转换不明确
- Visual C++GC接口如何启用它以及要包含哪个库
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- visual c++,如何获取解决方案目录中的代码
- Visual Studio mkl_link_tool.exe链接错误
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头