【问题标题】:Changing CFrameWnd to CFrameWndEx in MFC causes unhandled exception - any ideas?在 MFC 中将 CFrameWnd 更改为 CFrameWndEx 会导致未处理的异常 - 有什么想法吗?
【发布时间】:2011-04-12 05:31:45
【问题描述】:

仍然习惯于这个 MFC 百灵鸟,我在这个特殊问题上遇到了难题。我正在更新一些遗留代码以使用 MFC 功能包中提供的一些更精细的控件。

按照网上给出的更新旧 MFC 应用程序的示例,将基础应用程序类更改为 CWinAppEx 工作正常,但是当我将 CFrameWnd 更改为 CFrameWndEx 时,我收到来自 mfc90d.dll 某处的 Debug Assert Failed 错误消息! AFXGetRegPath。忽略此消息会导致大量 0xC0000005:访问冲突错误。

如果您有任何关于如何解决此问题的建议,我将不胜感激。

干杯。

【问题讨论】:

    标签: c++ mfc mfc-feature-pack


    【解决方案1】:

    MFC 框架的源代码包含在 Visual Studio 中,因此应该安装在您的计算机上。通常,当框架触发调试断言时,您应该进入调试器,这将帮助您确定问题的确切原因。

    查看源代码,可以看到AFXGetRegPath函数包含几个断言:

    ENSURE(lpszPostFix != NULL);
    ASSERT_VALID(pApp);
    ENSURE(AfxGetApp()->m_pszRegistryKey != NULL);
    ENSURE(AfxGetApp()->m_pszProfileName != NULL);
    

    如果我不得不猜测,我会说是 m_pszRegistryKey 检查失败,可能是因为您没有在应用程序类的 InitInstance 函数中调用 SetRegistryKey

    我希望这会有所帮助!

    【讨论】:

    • 你的蜘蛛感知已经很好地调整了——这正是问题所在,在设置了注册表项后它就可以工作了。仍然不确定为什么它只是在将 CFrameWnd 更改为 CFrameWndEx 后才成为一个问题,但我很高兴不必为此进行挖掘。非常感谢!
    • 有一个很好的 github 项目涵盖了这一点。 “替换基类”的第4步提到升级到Ex类时应该添加SetRegistryKey()...github.com/MicrosoftDocs/cpp-docs/blob/master/docs/mfc/…
    猜你喜欢
    • 2010-10-07
    • 2013-07-06
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多