vc6上没问题:
//
GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND|MF_CHECKED);

解决方案 »

  1.   

    VS2010建出来的SDI/MDI都是类似BCG的东西,和之前的是不一样的,你可以调试发现GetMenu/GetSubMenu函数返回的指针是无效的
      

  2.   

    谢谢您的回复!相关代码是:
            void Cclass6_menuView::OnRButtonDown(UINT nFlags, CPoint point)
           {
    // TODO: 在此添加消息处理程序代码和/或调用默认值

    menu.LoadMenuA(IDR_MENU3);
    CMenu *pPopup=menu.GetSubMenu(0);
    pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);  
    CView::OnRButtonDown(nFlags, point);
    }
       调试时发现是在 CMenu::TrackPopupMenu(UINT nFlags, int x, int y,CWnd* pWnd, LPCRECT lpRect)

    中的    ASSERT(m_hMenu != NULL);//是在这一行提示中断 提示:class6_menu.exe 中的 0x52f1643e (mfc100d.dll) 处有未经处理的异常: 0xC0000005: 读取 位置 0x00000004 时发生访问冲突       
           是代码中的指向CMenu类的指针pPopup出问题了请问这有什么解决方法?                 
      

  3.   


    当时我的解决方法如下:
    VS2010建的SDI/MDI与之前的不一样,是类似BCG的一些东西,所以用之前的方法GetMenu()得到CMenu是NULL或者无效。
    您可以在CMainFrame类中找到CMFCMenuBar m_wndMenuBar;这个成员变量,如果您将跟它相关的代码注释掉的话,然后再试试GetMenu()函数看看。 
      

  4.   

    我的额原因查到了 是一个com组建没有注册的原因 因为我写的这个组件用到了那个com的接口 创建失败了