Я только начал работать над проектом, который был разработан в 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 и сохранил его - изменений не было.Поэтому я исключаю проблемы совместимости меню из-за неправильного формата ресурса.
Я использую Windows XP SP3 на ThinkPad T61p.
Код, который создает меню
CMenu menu;
menu.LoadMenu(RESOURCE_NAME);
SetMenu(&menu);
И работает в контексте подкласса CFrameWnd
.
Я много искал в Google и совершенно уверен, что до этого никто не сталкивался с этой проблемой;Кроме того, я новичок во всех C ++, MFC и Visual Studio.Помощь будет очень ценится;Если я могу предоставить больше проблемных метаданных, пожалуйста, сообщите мне, и я сделаю это.Заранее спасибо!