【发布时间】:2015-09-17 16:57:59
【问题描述】:
我从 DLL 上下文中调用这个函数,
void CmodguiApp::ReportStatusBarImageCount() {
CMainFrame *frm = nullptr;
auto app = AfxGetApp();
if (nullptr != app) {
frm = (CMainFrame*)app->GetMainWnd();
}
assert(frm);
frm->setStatusBarImageCount(L"Text");
}
一切正常。 frm 不是空指针。
然后,在setStatusBarImageCount内部,如下所述,软件导致断言错误
可能出了什么问题?
void CMainFrame::setStatusBarImageCount(const wchar_t *str) {
m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(ID_STATUSBAR_IMAGECOUNT), str);
}
此应用具有 MFC 动态链接。请让我强调,setStatusBarImageCount 函数是从 DLL 中调用的,而不是从主 MFC 应用程序中调用的。
【问题讨论】:
-
发生的断言错误究竟是什么?
-
CommandToIndex可能返回 -1。当您获得调试断言时,单击“重试”,然后在下一个窗口中单击“中断”,它将带您找到问题的根源。 -
@PaulMcKenzie 它不会让我深入研究 MFC 代码(只告诉我它在 mfc120 dll 上)
-
是的,有时它不会让您深入了解。但至少它会告诉您文件名(但不是正确的文件路径)。在您的计算机上查找此文件:“C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\src\mfc\wincore.cpp”(我使用的是 VS 2015,如果您使用的是不同的版本)。然后查看“wincore.cpp”的第 972 行。
-
这可能是您之前回答的多线程错误。尽管我不确定呼叫的来源有什么不同。顺便说一句,调试器应该将您直接带到 MFC 错误源。检查解决方案的属性页中是否有“调试源文件”。见图片:ericmartel.com/wp-content/uploads/2010/04/donotlook.jpg 但有时调试器就是不想合作。