在 MFC 中将 CFrameWnd 更改为 CFrameWndEx 会导致未处理的异常 - 有什么想法吗?

Mon*_*nce 3 c++ mfc mfc-feature-pack

仍在适应这个 MFC 百灵鸟,我在这个特定问题上遇到了困难。我正在更新一些旧代码以使用 MFC 功能包中提供的一些更精致的控件。

按照网上给出的更新旧 MFC 应用程序的示例,将应用程序基类更改为 CWinAppEx 效果很好,但是当我将 CFrameWnd 更改为 CFrameWndEx 时,我收到来自 mfc90d.dll!AFXGetRegPath 中某处的“调试断言失败”错误消息。忽略此消息会导致出现大量 0xC0000005:访问冲突错误。

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

干杯。

Chr*_*isN 5

MFC 框架的源代码作为 Visual Studio 的一部分包含在内,因此应将其安装在您的计算机上。一般来说,当框架触发调试断言时,您应该进入调试器,这将帮助您确定问题的确切原因。

查看源代码,我可以看到该AFXGetRegPath函数包含一些断言:

ENSURE(lpszPostFix != NULL);
ASSERT_VALID(pApp);
ENSURE(AfxGetApp()->m_pszRegistryKey != NULL);
ENSURE(AfxGetApp()->m_pszProfileName != NULL);
Run Code Online (Sandbox Code Playgroud)

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

我希望这有帮助!